]> Kevux Git Server - fll/commitdiff
Update: Move common fl_fss functions to f_fss where possible, also add private-fss...
authorKevin Day <thekevinday@gmail.com>
Tue, 9 Jun 2020 03:23:06 +0000 (22:23 -0500)
committerKevin Day <thekevinday@gmail.com>
Tue, 9 Jun 2020 03:23:06 +0000 (22:23 -0500)
Some of the fl_fss functions can be moved to f_fss, now that f_utf is considered an exception-case core library.

Some of the fl_fss functions are being used within itself.
Use private functions to do this.

35 files changed:
build/level_0/settings
build/level_1/settings
build/monolithic/settings
level_0/f_fss/c/fss.c [new file with mode: 0644]
level_0/f_fss/c/fss.h
level_0/f_fss/data/build/dependencies
level_0/f_fss/data/build/settings
level_0/f_serialize/data/build/settings
level_0/f_utf/c/private-utf.h
level_1/fl_fss/c/fss.c
level_1/fl_fss/c/fss.h
level_1/fl_fss/c/fss_basic.c
level_1/fl_fss/c/fss_basic.h
level_1/fl_fss/c/fss_basic_list.c
level_1/fl_fss/c/fss_basic_list.h
level_1/fl_fss/c/fss_extended.c
level_1/fl_fss/c/fss_extended.h
level_1/fl_fss/c/fss_extended_list.c
level_1/fl_fss/c/fss_extended_list.h
level_1/fl_fss/c/private-fss.c [new file with mode: 0644]
level_1/fl_fss/c/private-fss.h [new file with mode: 0644]
level_1/fl_fss/data/build/dependencies
level_1/fl_fss/data/build/settings
level_2/fll_fss/data/build/settings
level_3/fake/data/build/settings
level_3/firewall/data/build/settings
level_3/fss_basic_list_read/data/build/settings
level_3/fss_basic_list_write/data/build/settings
level_3/fss_basic_read/data/build/settings
level_3/fss_basic_write/data/build/settings
level_3/fss_extended_list_read/data/build/settings
level_3/fss_extended_read/data/build/settings
level_3/fss_extended_write/data/build/settings
level_3/fss_status_code/data/build/settings
level_3/init/data/build/settings

index df39f43f7790cd5fe144a811192f719614608da8..610a2e79cf2ea0f2d159b8054f6d8a6fff0cf759 100644 (file)
@@ -20,7 +20,7 @@ build_language c
 build_linker ar
 build_libraries -lc
 build_libraries-level
-build_sources_library console.c conversion.c directory.c private-directory.c environment.c private-environment.c file.c private-file.c memory.c path.c pipe.c print.c serialize.c private-serialize.c socket.c utf.c private-utf.c
+build_sources_library console.c conversion.c directory.c private-directory.c environment.c private-environment.c file.c private-file.c fss.c memory.c path.c pipe.c print.c serialize.c private-serialize.c socket.c utf.c private-utf.c
 build_sources_program
 build_sources_headers color.h console.h conversion.h directory.h directory_type.h environment.h file.h fss.h memory.h path.h pipe.h print.h serialize.h socket.h status.h status_array.h string.h type.h type_array.h utf.h
 build_sources_script
index 097479e9ac4d33bf26109470e1be3a3c7cb53bf4..99caa30ab8489f04cbb80fde0c54858ee79486f4 100644 (file)
@@ -20,7 +20,7 @@ build_language c
 build_linker ar
 build_libraries -lc
 build_libraries-level -lfll_0
-build_sources_library color.c console.c directory.c private-directory.c fss.c fss_basic.c fss_basic_list.c fss_extended.c fss_extended_list.c print.c status.c string.c private-string.c utf.c private-utf.c utf_file.c private-utf_file.c
+build_sources_library color.c console.c directory.c private-directory.c fss.c private-fss.c fss_basic.c fss_basic_list.c fss_extended.c fss_extended_list.c print.c status.c string.c private-string.c utf.c private-utf.c utf_file.c private-utf_file.c
 build_sources_program
 build_sources_headers color.h console.h directory.h fss.h fss_basic.h fss_basic_list.h fss_extended.h fss_extended_list.h fss_macro.h fss_status.h print.h status.h string.h utf.h utf_file.h
 build_sources_script
index 98750471e4a2c7e76087c2d505f3261ae370be9b..7fa74262e60837d1282f6f6c63b15d3608e4b96b 100644 (file)
@@ -20,7 +20,7 @@ build_language c
 build_linker ar
 build_libraries -lc
 build_libraries-monolithic
-build_sources_library level_0/console.c level_0/conversion.c level_0/directory.c level_0/private-directory.c level_0/environment.c level_0/private-environment.c level_0/file.c level_0/private-file.c level_0/memory.c level_0/path.c level_0/pipe.c level_0/print.c level_0/serialize.c level_0/private-serialize.c level_0/socket.c level_0/utf.c level_0/private-utf.c level_1/color.c level_1/console.c level_1/directory.c level_1/private-directory.c level_1/fss.c level_1/fss_basic.c level_1/fss_basic_list.c level_1/fss_extended.c level_1/fss_extended_list.c level_1/print.c level_1/status.c level_1/string.c level_1/private-string.c level_1/utf.c level_1/private-utf.c level_1/utf_file.c level_1/private-utf_file.c level_2/directory.c level_2/execute.c level_2/private-execute.c level_2/file.c level_2/fss.c level_2/fss_basic.c level_2/fss_basic_list.c level_2/fss_extended.c level_2/fss_extended_list.c level_2/fss_status.c level_2/program.c level_2/status.c
+build_sources_library level_0/console.c level_0/conversion.c level_0/directory.c level_0/private-directory.c level_0/environment.c level_0/private-environment.c level_0/file.c level_0/private-file.c level_0/fss.c level_0/memory.c level_0/path.c level_0/pipe.c level_0/print.c level_0/serialize.c level_0/private-serialize.c level_0/socket.c level_0/utf.c level_0/private-utf.c level_1/color.c level_1/console.c level_1/directory.c level_1/private-directory.c level_1/fss.c level_1/private-fss.c level_1/fss_basic.c level_1/fss_basic_list.c level_1/fss_extended.c level_1/fss_extended_list.c level_1/print.c level_1/status.c level_1/string.c level_1/private-string.c level_1/utf.c level_1/private-utf.c level_1/utf_file.c level_1/private-utf_file.c level_2/directory.c level_2/execute.c level_2/private-execute.c level_2/file.c level_2/fss.c level_2/fss_basic.c level_2/fss_basic_list.c level_2/fss_extended.c level_2/fss_extended_list.c level_2/fss_status.c level_2/program.c level_2/status.c
 build_sources_program
 build_sources_headers level_0/color.h level_0/console.h level_0/conversion.h level_0/directory.h level_0/directory_type.h level_0/environment.h level_0/file.h level_0/fss.h level_0/memory.h level_0/path.h level_0/pipe.h level_0/print.h level_0/serialize.h level_0/socket.h level_0/status.h level_0/status_array.h level_0/string.h level_0/type.h level_0/type_array.h level_0/utf.h level_1/color.h level_1/console.h level_1/directory.h level_1/fss.h level_1/fss_basic.h level_1/fss_basic_list.h level_1/fss_extended.h level_1/fss_extended_list.h level_1/fss_macro.h level_1/fss_status.h level_1/print.h level_1/status.h level_1/string.h level_1/utf.h level_1/utf_file.h level_2/directory.h level_2/execute.h level_2/file.h level_2/fss.h level_2/fss_basic.h level_2/fss_basic_list.h level_2/fss_extended.h level_2/fss_extended_list.h level_2/fss_status.h level_2/program.h level_2/status.h
 build_sources_script
diff --git a/level_0/f_fss/c/fss.c b/level_0/f_fss/c/fss.c
new file mode 100644 (file)
index 0000000..27acd7e
--- /dev/null
@@ -0,0 +1,393 @@
+#include <level_0/fss.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_fss_decrement_buffer_
+  f_return_status f_fss_decrement_buffer(const f_string_static buffer, f_string_range *location, const f_string_length step) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer.used <= 0) return F_status_set_error(F_parameter);
+      if (location->start < 0) return F_status_set_error(F_parameter);
+      if (location->stop < location->start) return F_status_set_error(F_parameter);
+      if (location->start >= buffer.used) return F_status_set_error(F_parameter);
+      if (step < 1) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (location->start < 1) return F_none_eos;
+
+    f_string_length i = 0;
+    unsigned short width = 0;
+
+    do {
+      width = f_macro_utf_byte_width(buffer.string[location->start - 1]);
+
+      if (width > location->start) {
+        if (width > 1) {
+          return F_status_set_error(F_incomplete_utf_eos);
+        }
+
+        return F_none_eos;
+      }
+
+      i++;
+      location->start -= width;
+    } while (i < step);
+
+    return F_none;
+  }
+#endif // _di_f_fss_decrement_buffer_
+
+#ifndef _di_f_fss_increment_buffer_
+  f_return_status f_fss_increment_buffer(const f_string_static buffer, f_string_range *location, const f_string_length step) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer.used <= 0) return F_status_set_error(F_parameter);
+      if (location->start < 0) return F_status_set_error(F_parameter);
+      if (location->stop < location->start) return F_status_set_error(F_parameter);
+      if (location->start >= buffer.used) return F_status_set_error(F_parameter);
+      if (step < 1) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_string_length i = 0;
+    unsigned short width = 0;
+
+    do {
+      width = f_macro_utf_byte_width(buffer.string[location->start]);
+
+      if (location->start + width > location->stop) {
+        if (width > 1) {
+          return F_status_set_error(F_incomplete_utf_stop);
+        }
+
+        location->start += width;
+        return F_none_stop;
+      }
+      else if (location->start + width >= buffer.used) {
+        if (width > 1) {
+          return F_status_set_error(F_incomplete_utf_eos);
+        }
+
+        location->start += width;
+        return F_none_eos;
+      }
+
+      i++;
+      location->start += width;
+    } while (i < step);
+
+    return F_none;
+  }
+#endif // _di_f_fss_increment_buffer_
+
+#ifndef _di_f_fss_is_graph_
+  f_return_status f_fss_is_graph(const f_string_static buffer, const f_string_range range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer.used <= 0) return F_status_set_error(F_parameter);
+      if (range.start < 0) return F_status_set_error(F_parameter);
+      if (range.stop < range.start) return F_status_set_error(F_parameter);
+      if (range.start >= buffer.used) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_string_length width_max = (range.stop - range.start) + 1;
+
+    if (width_max > buffer.used - range.start) {
+      width_max = buffer.used - range.start;
+    }
+
+    return f_utf_is_graph(buffer.string + range.start, width_max);
+  }
+#endif // _di_f_fss_is_graph_
+
+#ifndef _di_f_fss_is_space_
+  f_return_status f_fss_is_space(const f_string_static buffer, const f_string_range range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer.used <= 0) return F_status_set_error(F_parameter);
+      if (range.start < 0) return F_status_set_error(F_parameter);
+      if (range.stop < range.start) return F_status_set_error(F_parameter);
+      if (range.start >= buffer.used) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_string_length width_max = (range.stop - range.start) + 1;
+
+    if (width_max > buffer.used - range.start) {
+      width_max = buffer.used - range.start;
+    }
+
+    return f_utf_is_whitespace(buffer.string + range.start, width_max);
+  }
+#endif // _di_f_fss_is_space_
+
+#ifndef _di_f_fss_shift_delimiters_
+  f_return_status f_fss_shift_delimiters(f_string_dynamic *buffer, const f_string_range range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer->used <= 0) return F_status_set_error(F_parameter);
+      if (range.start < 0) return F_status_set_error(F_parameter);
+      if (range.stop < range.start) return F_status_set_error(F_parameter);
+      if (range.start >= buffer->used) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_string_length position = 0;
+    f_string_length distance = 0;
+    unsigned short utf_width = 0;
+    unsigned short i = 0;
+
+    position = range.start;
+
+    while (position < buffer->used && position <= range.stop) {
+      if (buffer->string[position] == f_fss_delimit_placeholder) {
+        distance++;
+      }
+
+      // do not waste time trying to process what is only going to be replaced with a delimit placeholder
+      if (position + distance >= buffer->used || position + distance > range.stop) {
+        break;
+      }
+
+      utf_width = f_macro_utf_byte_width_is(buffer->string[position]);
+      if (utf_width > 1) {
+        // not enough space in buffer or in range range to process UTF-8 character.
+        if (position + utf_width >= buffer->used || position + utf_width > range.stop) {
+          return F_status_set_error(F_utf);
+        }
+
+        if (distance > 0) {
+          while (utf_width > 0) {
+            buffer->string[position] = buffer->string[position + distance];
+            utf_width--;
+            position++;
+          }
+        }
+      }
+      else {
+        // shift everything down one for each placeholder found
+        if (distance > 0) {
+          buffer->string[position] = buffer->string[position + distance];
+        }
+
+        position++;
+      }
+    }
+
+    if (distance > 0) {
+      while (position < buffer->used + distance && position <= range.stop) {
+        buffer->string[position] = f_fss_delimit_placeholder;
+        position++;
+      }
+    }
+
+    return F_none;
+  }
+#endif // _di_f_fss_shift_delimiters_
+
+#ifndef _di_f_fss_skip_past_space_
+  f_return_status f_fss_skip_past_space(const f_string_static buffer, f_string_range *range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer.used <= 0) return F_status_set_error(F_parameter);
+      if (range == 0) return F_status_set_error(F_parameter);
+      if (range->start < 0) return F_status_set_error(F_parameter);
+      if (range->stop < range->start) return F_status_set_error(F_parameter);
+      if (range->start >= buffer.used) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_status status = F_none;
+    unsigned short width = 0;
+
+    f_string_length width_max = (range->stop - range->start) + 1;
+
+    if (width_max > buffer.used - range->start) {
+      width_max = buffer.used - range->start;
+    }
+
+    for (;;) {
+      if (buffer.string[range->start] != f_fss_delimit_placeholder) {
+        status = f_utf_is_whitespace(buffer.string + range->start, width_max);
+
+        if (status == F_false) {
+          status = f_utf_is_control(buffer.string + range->start, width_max);
+
+          if (status == F_false) {
+            status = f_utf_is_zero_width(buffer.string + range->start, width_max);
+
+            if (status == F_true) {
+              f_string_length next_width_max = 0;
+
+              for (f_string_length next = range->start + 1; next < buffer.used && next <= range->stop; next += f_macro_utf_byte_width_is(buffer.string[next])) {
+                next_width_max = (range->stop - next) + 1;
+
+                status = f_utf_is_whitespace(buffer.string + next, width_max);
+                if (status == F_true) {
+                  // treat zero-width before a space like a space.
+                  break;
+                }
+                else if (status == F_false) {
+                  status = f_utf_is_control(buffer.string + next, width_max);
+
+                  if (status == F_true) {
+                    // treat zero-width before a control character like a space.
+                    break;
+                  }
+                  else if (status == F_false) {
+                    status = f_utf_is_zero_width(buffer.string + next, width_max);
+
+                    if (status == F_true) {
+                      // seek until a non-zero-width is reached.
+                      continue;
+                    }
+                    else if (status == F_false) {
+                      // treat zero-width as a non-whitespace non-control character when preceding a non-whitespace non-control character.
+                      return F_none;
+                    }
+                  }
+                  else if (F_status_is_error(status)) return status;
+                }
+                else if (F_status_is_error(status)) return status;
+              } // for
+            }
+            else if (status == F_false) {
+              // treat zero-width as a graph when preceding a non-whitespace non-control (that is not a zero-width).
+              return F_none;
+            }
+            else if (F_status_is_error(status)) return status;
+          }
+          else if (F_status_is_error(status)) return status;
+        }
+        else if (F_status_is_error(status)) return status;
+      }
+
+      if (buffer.string[range->start] == f_string_eol[0]) return F_none_eol;
+
+      width = f_macro_utf_byte_width_is(buffer.string[range->start]);
+
+      if (width == 0) {
+        width = 1;
+      }
+      // Do not operate on UTF-8 fragments that are not the first byte of the character.
+      else if (width == 1) {
+        return F_status_set_error(F_incomplete_utf);
+      }
+      else {
+        if (range->start + width >= buffer.used) return F_status_set_error(F_incomplete_utf_eos);
+        if (range->start + width > range->stop) return F_status_set_error(F_incomplete_utf_stop);
+      }
+
+      range->start += width;
+
+      if (range->start >= buffer.used) return F_none_eos;
+      if (range->start > range->stop) return F_none_stop;
+
+      width_max = (range->stop - range->start) + 1;
+
+      if (width_max > buffer.used - range->start) {
+        width_max = buffer.used - range->start;
+      }
+    } // for
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_fss_skip_past_space_
+
+#ifndef _di_f_fss_skip_past_non_graph_
+  f_return_status f_fss_skip_past_non_graph(const f_string_static buffer, f_string_range *range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (buffer.used <= 0) return F_status_set_error(F_parameter);
+      if (range == 0) return F_status_set_error(F_parameter);
+      if (range->start < 0) return F_status_set_error(F_parameter);
+      if (range->stop < range->start) return F_status_set_error(F_parameter);
+      if (range->start >= buffer.used) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    f_status status = F_none;
+    unsigned short width = 0;
+
+    f_string_length width_max = (range->stop - range->start) + 1;
+
+    if (width_max > buffer.used - range->start) {
+      width_max = buffer.used - range->start;
+    }
+
+    for (;;) {
+      if (buffer.string[range->start] != f_fss_delimit_placeholder) {
+        status = f_utf_is_graph(buffer.string + range->start, width_max);
+
+        if (status == F_true) {
+          // stop at a graph.
+          break;
+        }
+        else if (status == F_false) {
+          status = f_utf_is_zero_width(buffer.string + range->start, width_max);
+
+          if (status == F_true) {
+            f_string_length next_width_max = 0;
+
+            for (f_string_length next = range->start + 1; next < buffer.used && next <= range->stop; next += f_macro_utf_byte_width_is(buffer.string[next])) {
+              next_width_max = (range->stop - next) + 1;
+
+              status = f_utf_is_graph(buffer.string + next, width_max);
+              if (status == F_true) {
+                // treat zero-width as a graph when preceding a graph.
+                return F_none;
+              }
+              else if (status == F_false) {
+                status = f_utf_is_zero_width(buffer.string + next, width_max);
+
+                if (status == F_true) {
+                  // seek until a non-zero-width is reached.
+                  continue;
+                }
+                else if (status == F_false) {
+                  // treat zero-width as a non-graph when preceding a non-graph (that is not a zero-width).
+                  break;
+                }
+                else if (F_status_is_error(status)) return status;
+              }
+              else if (F_status_is_error(status)) return status;
+            } // for
+          }
+          else if (status == F_false) {
+            // continue on when non-graph and non-zero-width.
+            break;
+          }
+          else if (F_status_is_error(status)) return status;
+        }
+        else if (F_status_is_error(status)) return status;
+      }
+
+      if (F_status_is_error(status)) return status;
+
+      width = f_macro_utf_byte_width_is(buffer.string[range->start]);
+
+      if (width == 0) {
+        width = 1;
+      }
+      // Do not operate on UTF-8 fragments that are not the first byte of the character.
+      else if (width == 1) {
+        return F_status_set_error(F_incomplete_utf);
+      }
+      else {
+        if (range->start + width >= buffer.used) return F_status_set_error(F_incomplete_utf_eos);
+        if (range->start + width > range->stop) return F_status_set_error(F_incomplete_utf_stop);
+      }
+
+      range->start += width;
+
+      if (range->start >= buffer.used) return F_none_eos;
+      if (range->start > range->stop) return F_none_stop;
+
+      width_max = (range->stop - range->start) + 1;
+
+      if (width_max > buffer.used - range->start) {
+        width_max = buffer.used - range->start;
+      }
+    } // for
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_fss_skip_past_non_graph_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
index 03cebe2cf163fbb4b80dc7fec8708371cb0153b5..46ea9741c8df0693e76fe802c3799ce997140a0d 100644 (file)
 #define _F_fss_h
 
 // fll-0 includes
+#include <level_0/type.h>
 #include <level_0/status.h>
 #include <level_0/memory.h>
 #include <level_0/string.h>
-#include <level_0/type.h>
+#include <level_0/utf.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -957,6 +958,196 @@ extern "C" {
     }
 #endif // _di_fss_nests_
 
+/**
+ * Continue to the previous character, based on step and character width.
+ *
+ * The start position must be at the start of a valid UTF-8 block.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The start and stop positions to be incremented.
+ *   The start position will be incremented by step.
+ * @param step
+ *   The number of steps to decrement the start position.
+ *   The steps refer to characters and not integers.
+ *   Essentially this number is considered against the width of every character found.
+ *   (For ASCII each step would be (sizeof(int8_t), which is 1).
+ *   (For UTF-8 character of width 3, each step would be (3 * sizeof(int8_t)).
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_stop if the stop range is reached before all steps are completed.
+ *   F_none_eos if the end of buffer is reached before all steps are completed.
+ *   F_incomplete_utf_eos (with error bit) if the end of buffer is reached before the complete UTF-8 character can be processed.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_fss_decrement_buffer_
+  extern f_return_status f_fss_decrement_buffer(const f_string_static buffer, f_string_range *range, const f_string_length step);
+#endif // _di_f_fss_decrement_buffer_
+
+/**
+ * Continue to the next character, based on step and character width.
+ *
+ * The start position must be at the start of a valid UTF-8 block.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The start and stop positions to be incremented.
+ *   The start position will be incremented by step.
+ * @param step
+ *   The number of steps to increment the start position.
+ *   The steps refer to characters and not integers.
+ *   Essentially this number is considered against the width of every character found.
+ *   (For ASCII each step would be (sizeof(int8_t), which is 1).
+ *   (For UTF-8 character of width 3, each step would be (3 * sizeof(int8_t)).
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_stop if the stop range is reached before all steps are completed.
+ *   F_none_eos if the end of buffer is reached before all steps are completed.
+ *   F_incomplete_utf_stop (with error bit) if the stop range is reached before the complete UTF-8 character can be processed.
+ *   F_incomplete_utf_eos (with error bit) if the end of buffer is reached before the complete UTF-8 character can be processed.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_fss_increment_buffer_
+  extern f_return_status f_fss_increment_buffer(const f_string_static buffer, f_string_range *range, const f_string_length step);
+#endif // _di_f_fss_increment_buffer_
+
+/**
+ * Identify whether or not a character in the buffer is a graph (ASCII or UTF-8) character.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The character at the start position will be checked against the graph.
+ * @param header
+ *   The header data to populate with results of this function.
+ *
+ * @return
+ *   F_true if the character in the buffer is a graph character.
+ *   F_false if the character in the buffer is not a graph character.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors from (with error bit): f_utf_is_graph().
+ *
+ * @see f_utf_is_graph()
+ */
+#ifndef _di_f_fss_is_graph_
+  extern f_return_status f_fss_is_graph(const f_string_static buffer, const f_string_range range);
+#endif // _di_f_fss_is_graph_
+
+/**
+ * Identify whether or not a character in the buffer is a space (ASCII or UTF-8) character.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The character at the start position will be checked against the graph.
+ * @param header
+ *   The header data to populate with results of this function.
+ *
+ * @return
+ *   F_true if the character in the buffer is a space character.
+ *   F_false if the character in the buffer is not a space character.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors from (with error bit): f_utf_is_space().
+ *
+ * @see f_utf_is_space()
+ */
+#ifndef _di_f_fss_is_space_
+  extern f_return_status f_fss_is_space(const f_string_static buffer, const f_string_range range);
+#endif // _di_f_fss_is_space_
+
+/**
+ * Shift all of the delimiters to the end of the used buffer.
+ *
+ * This allows one to do a printf on the dynamic string without the delimiters arbitrarily stopping the output.
+ * No reallocations are performed, this will only shift characters.
+ *
+ * @param buffer
+ *   The string to process.
+ *   This gets updated.
+ * @param range
+ *   A restriction on where within the buffer the shifting happens.
+ *
+ * @return
+ *   F_none on success.
+ *   F_utf (with error bit) if UTF-8 cannot be fully processed (buffer or range range not long enough).
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_fss_shift_delimiters_
+  extern f_return_status f_fss_shift_delimiters(f_string_dynamic *buffer, const f_string_range range);
+#endif // _di_f_fss_shift_delimiters_
+
+/**
+ * Skip past all whitespace and control characters, except newline.
+ *
+ * Zero-width characters are not skipped because they might be part of a graph character, such as combining characters.
+ * @todo needs consideration on how to handle zero-width before space/control vs zero-width before graph.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The start and stop positions in the buffer being processed.
+ *   This increments range->start.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success and EOL was reached.
+ *   F_none_eos on success and EOS was reached.
+ *   F_none_stop on success and stop point was reached.
+ *   F_incomplete_utf (with error bit) if an incomplete UTF-8 fragment was found.
+ *   F_incomplete_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS.
+ *   F_incomplete_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors from (with error bit): f_utf_is_control().
+ *   Errors from (with error bit): f_utf_is_whitespace().
+ *   Errors from (with error bit): f_utf_is_zero_width().
+ *
+ * @see f_utf_is_control()
+ * @see f_utf_is_whitespace()
+ * @see f_utf_is_zero_width()
+ */
+#ifndef _di_f_fss_skip_past_space_
+  extern f_return_status f_fss_skip_past_space(const f_string_static buffer, f_string_range *range);
+#endif // _di_f_fss_skip_past_space_
+
+/**
+ * Skip past all non-graph and non-zero-width characters (whitespace and control characters).
+ *
+ * Zero-width characters are not skipped because they might be part of a graph character, such as combining characters.
+ * @todo needs consideration on how to handle zero-width before space/control vs zero-width before graph.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The start and stop positions in the buffer being processed.
+ *   This increments range->start.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success and EOL was reached.
+ *   F_none_eos on success and EOS was reached.
+ *   F_none_stop on success and stop point was reached.
+ *   F_incomplete_utf (with error bit) if an incomplete UTF-8 fragment was found.
+ *   F_incomplete_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS.
+ *   F_incomplete_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors from (with error bit): f_utf_is_graph().
+ *   Errors from (with error bit): f_utf_is_zero_width().
+ *
+ * @see f_utf_is_graph()
+ * @see f_utf_is_zero_width()
+ */
+#ifndef _di_f_fss_skip_past_non_graph_
+  extern f_return_status f_fss_skip_past_non_graph(const f_string_static buffer, f_string_range *range);
+#endif // _di_f_fss_skip_past_non_graph_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
index d8175f560a573638a52fec738c6bd984a86a5620..13b45c70749e2d3516b47e95d38129f780366064 100644 (file)
@@ -2,3 +2,4 @@ f_type
 f_status
 f_memory
 f_string
+f_utf
index f036d4ad0f7ea9a00a15f598edc3358858c539cb..f582d7f5b0e12c7e21c3a2e07b0723b7557bfba9 100644 (file)
@@ -19,8 +19,8 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lf_memory
-build_sources_library
+build_libraries-individual -lf_utf -lf_memory
+build_sources_library fss.c
 build_sources_program
 build_sources_headers fss.h
 build_sources_script
index d779b3e3001ff15a8c8a01ed8f7278bcd0e53544..fc7659db0908573bb21106c49fa5a093e3fe755f 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lf_memory
+build_libraries-individual -lf_utf -lf_memory
 build_sources_library serialize.c private-serialize.c
 build_sources_program
 build_sources_headers serialize.h
index b696eb1529babc06adb93159ba7061e0089ac90f..ff175c65bf594ce54bef0720c78d67ff038968cc 100644 (file)
@@ -10,8 +10,8 @@
  * These are provided for internal reduction in redundant code.
  * These should not be exposed/used outside of this project.
  */
-#ifndef _PRIVATE_FL_utf_h
-#define _PRIVATE_FL_utf_h
+#ifndef _PRIVATE_F_utf_h
+#define _PRIVATE_F_utf_h
 
 #ifdef __cplusplus
 extern "C" {
@@ -28,8 +28,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_true if a UTF-8 control character.
  *   F_false if not a UTF-8 control character.
+ *   F_true if a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -51,8 +51,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_true if a UTF-8 control character.
  *   F_false if not a UTF-8 control character.
+ *   F_true if a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -74,8 +74,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_true if a UTF-8 control character.
  *   F_false if not a UTF-8 control character.
+ *   F_true if a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -95,8 +95,8 @@ extern "C" {
  *   The character to validate.
  *
  * @return
- *   F_true if a UTF-8 control picture character.
  *   F_false if not a UTF-8 control picture character.
+ *   F_true if a UTF-8 control picture character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see f_utf_character_is_control_picture()
@@ -117,8 +117,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_true if a UTF-8 control character.
  *   F_false if not a UTF-8 control character.
+ *   F_true if a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -182,8 +182,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_true if a UTF-8 control character.
  *   F_false if not a UTF-8 control character.
+ *   F_true if a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -205,8 +205,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_true if a UTF-8 control character.
  *   F_false if not a UTF-8 control character.
+ *   F_true if a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -228,8 +228,8 @@ extern "C" {
  *   The number of bytes repesenting the character width.
  *
  * @return
- *   F_false if not a UTF-8 control character.
  *   F_true if a UTF-8 control character.
+ *   F_false if not a UTF-8 control character.
  *   F_utf (with error bit) if character is an invalid UTF-8 character.
  *
  * @see iscntrl()
@@ -264,4 +264,4 @@ extern "C" {
 } // extern "C"
 #endif
 
-#endif // _PRIVATE_FL_utf_h
+#endif // _PRIVATE_F_utf_h
index 0942ff5ebc77d653d4c7b72dd9e34769fd85289e..a213be87e9d08eee084d9858eee661821a8a3f55 100644 (file)
@@ -1,43 +1,10 @@
 #include <level_1/fss.h>
+#include "private-fss.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifndef _di_fl_fss_decrement_buffer_
-  f_return_status fl_fss_decrement_buffer(const f_string_static buffer, f_string_range *location, const f_string_length step) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer.used <= 0) return F_status_set_error(F_parameter);
-      if (location->start < 0) return F_status_set_error(F_parameter);
-      if (location->stop < location->start) return F_status_set_error(F_parameter);
-      if (location->start >= buffer.used) return F_status_set_error(F_parameter);
-      if (step < 1) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (location->start < 1) return F_none_eos;
-
-    f_string_length i = 0;
-    unsigned short width = 0;
-
-    do {
-      width = f_macro_utf_byte_width(buffer.string[location->start - 1]);
-
-      if (width > location->start) {
-        if (width > 1) {
-          return F_status_set_error(F_incomplete_utf_eos);
-        }
-
-        return F_none_eos;
-      }
-
-      i++;
-      location->start -= width;
-    } while (i < step);
-
-    return F_none;
-  }
-#endif // _di_fl_fss_decrement_buffer_
-
 #ifndef _di_fl_fss_identify_
   f_return_status fl_fss_identify(const f_string_static buffer, f_fss_header *header) {
     #ifndef _di_level_1_parameter_checking_
@@ -45,127 +12,7 @@ extern "C" {
       if (buffer.used <= 0) return F_status_set_error(F_parameter);
     #endif // _di_level_1_parameter_checking_
 
-    register f_string_length i = 0;
-
-    if (buffer.used < 10) {
-      // "# fss-0000" is always at least 10 characters.
-      return FL_fss_header_not;
-    }
-
-    // If this correctly follows the FSS specification, then this should be all that needs to be done (as well as atoh for ascii to hex).
-    // All characters used in the identifier are only in the ascii equivalents of the characters, any similarly looking character or number representing in UTF-8 is considered invalid.
-    if (buffer.string[i] == f_fss_type_header_open) {
-      i++;
-
-      if (buffer.string[i] == f_fss_type_header_part1) {
-        i++;
-
-        if (buffer.string[i] == f_fss_type_header_part2) {
-          i++;
-
-          if (buffer.string[i] == f_fss_type_header_part3) {
-            i++;
-
-            if (buffer.string[i] == f_fss_type_header_part4) {
-              i++;
-
-              if (buffer.string[i] == f_fss_type_header_part5) {
-                i++;
-
-                if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                  i++;
-
-                  if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                    i++;
-
-                    if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                      i++;
-
-                      if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                        i++;
-
-                        f_string_range range = f_string_range_initialize;
-
-                        range.start = i - 4;
-                        range.stop = i;
-
-                        // 1: A possibly valid header type was found, now convert it into its proper format and save the header type.
-                        const f_status status = f_conversion_string_to_hexidecimal_unsigned(buffer.string, &header->type, range);
-                        if (F_status_is_error(status)) return status;
-
-                        if (status == F_none) {
-                          // 2: At this point, we can still know the proper format for the file and still have a invalid header, handle accordingly.
-                          if (buffer.string[i] == f_fss_type_header_close) {
-                            header->length = i + 1;
-
-                            return F_none;
-                          }
-                          else {
-                            // if "# fss-0000" is there, regardless of whats next, we can guess this to be of fss-0000, even if its fss-00001 (this is a guess afterall).
-                            header->length = i + 1;
-
-                            return F_status_is_warning(FL_fss_accepted_invalid);
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-      // people can miss spaces, so lets accept in an attempt to interpret the file anyway, but return values at this point are to be flagged as invalid.
-      else if (buffer.string[i] == f_fss_type_header_part2) {
-        i++;
-
-        if (buffer.string[i] == f_fss_type_header_part3) {
-          i++;
-
-          if (buffer.string[i] == f_fss_type_header_part4) {
-            i++;
-
-            if (buffer.string[i] == f_fss_type_header_part5) {
-              i++;
-
-              if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                i++;
-
-                if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                  i++;
-
-                  if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                    i++;
-
-                    if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
-                      i++;
-
-                      f_string_range range = f_string_range_initialize;
-
-                      range.start = i - 4;
-                      range.stop = i;
-
-                      const f_status status = f_conversion_string_to_hexidecimal_unsigned(buffer.string, &header->type, range);
-                      if (F_status_is_error(status)) return status;
-
-                      header->length = i + 1;
-
-                      return F_status_is_warning(FL_fss_accepted_invalid);
-                    }
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-
-    // @todo At some point add checksum and compressions checks here, but the above statements will have to be adjusted accordingly.
-    // 3: eventually this will be processing the checksum and 4: will be processing the compression.
-
-    return FL_fss_header_not;
+    return private_fl_fss_identify(buffer, header);
   }
 #endif // _di_fl_fss_identify_
 
@@ -194,362 +41,10 @@ extern "C" {
     status = f_file_read_until(*file, &buffer, f_fss_max_header_length + 1);
     if (F_status_is_error(status)) return status;
 
-    return fl_fss_identify(buffer, header);
+    return private_fl_fss_identify(buffer, header);
   }
 #endif // _di_fl_fss_identify_file_
 
-#ifndef _di_fl_fss_increment_buffer_
-  f_return_status fl_fss_increment_buffer(const f_string_static buffer, f_string_range *location, const f_string_length step) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer.used <= 0) return F_status_set_error(F_parameter);
-      if (location->start < 0) return F_status_set_error(F_parameter);
-      if (location->stop < location->start) return F_status_set_error(F_parameter);
-      if (location->start >= buffer.used) return F_status_set_error(F_parameter);
-      if (step < 1) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    f_string_length i = 0;
-    unsigned short width = 0;
-
-    do {
-      width = f_macro_utf_byte_width(buffer.string[location->start]);
-
-      if (location->start + width > location->stop) {
-        if (width > 1) {
-          return F_status_set_error(F_incomplete_utf_stop);
-        }
-
-        location->start += width;
-        return F_none_stop;
-      }
-      else if (location->start + width >= buffer.used) {
-        if (width > 1) {
-          return F_status_set_error(F_incomplete_utf_eos);
-        }
-
-        location->start += width;
-        return F_none_eos;
-      }
-
-      i++;
-      location->start += width;
-    } while (i < step);
-
-    return F_none;
-  }
-#endif // _di_fl_fss_increment_buffer_
-
-#ifndef _di_fl_fss_is_graph_
-  f_return_status fl_fss_is_graph(const f_string_static buffer, const f_string_range range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer.used <= 0) return F_status_set_error(F_parameter);
-      if (range.start < 0) return F_status_set_error(F_parameter);
-      if (range.stop < range.start) return F_status_set_error(F_parameter);
-      if (range.start >= buffer.used) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    f_string_length width_max = (range.stop - range.start) + 1;
-
-    if (width_max > buffer.used - range.start) {
-      width_max = buffer.used - range.start;
-    }
-
-    return f_utf_is_graph(buffer.string + range.start, width_max);
-  }
-#endif // _di_fl_fss_is_graph_
-
-#ifndef _di_fl_fss_is_space_
-  f_return_status fl_fss_is_space(const f_string_static buffer, const f_string_range range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer.used <= 0) return F_status_set_error(F_parameter);
-      if (range.start < 0) return F_status_set_error(F_parameter);
-      if (range.stop < range.start) return F_status_set_error(F_parameter);
-      if (range.start >= buffer.used) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    f_string_length width_max = (range.stop - range.start) + 1;
-
-    if (width_max > buffer.used - range.start) {
-      width_max = buffer.used - range.start;
-    }
-
-    return f_utf_is_whitespace(buffer.string + range.start, width_max);
-  }
-#endif // _di_fl_fss_is_space_
-
-#ifndef _di_fl_fss_shift_delimiters_
-  f_return_status fl_fss_shift_delimiters(f_string_dynamic *buffer, const f_string_range range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer->used <= 0) return F_status_set_error(F_parameter);
-      if (range.start < 0) return F_status_set_error(F_parameter);
-      if (range.stop < range.start) return F_status_set_error(F_parameter);
-      if (range.start >= buffer->used) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    f_string_length position = 0;
-    f_string_length distance = 0;
-    unsigned short utf_width = 0;
-    unsigned short i = 0;
-
-    position = range.start;
-
-    while (position < buffer->used && position <= range.stop) {
-      if (buffer->string[position] == f_fss_delimit_placeholder) {
-        distance++;
-      }
-
-      // do not waste time trying to process what is only going to be replaced with a delimit placeholder
-      if (position + distance >= buffer->used || position + distance > range.stop) {
-        break;
-      }
-
-      utf_width = f_macro_utf_byte_width_is(buffer->string[position]);
-      if (utf_width > 1) {
-        // not enough space in buffer or in range range to process UTF-8 character.
-        if (position + utf_width >= buffer->used || position + utf_width > range.stop) {
-          return F_status_set_error(F_utf);
-        }
-
-        if (distance > 0) {
-          while (utf_width > 0) {
-            buffer->string[position] = buffer->string[position + distance];
-            utf_width--;
-            position++;
-          }
-        }
-      }
-      else {
-        // shift everything down one for each placeholder found
-        if (distance > 0) {
-          buffer->string[position] = buffer->string[position + distance];
-        }
-
-        position++;
-      }
-    }
-
-    if (distance > 0) {
-      while (position < buffer->used + distance && position <= range.stop) {
-        buffer->string[position] = f_fss_delimit_placeholder;
-        position++;
-      }
-    }
-
-    return F_none;
-  }
-#endif // _di_fl_fss_shift_delimiters_
-
-#ifndef _di_fl_fss_skip_past_space_
-  f_return_status fl_fss_skip_past_space(const f_string_static buffer, f_string_range *range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer.used <= 0) return F_status_set_error(F_parameter);
-      if (range == 0) return F_status_set_error(F_parameter);
-      if (range->start < 0) return F_status_set_error(F_parameter);
-      if (range->stop < range->start) return F_status_set_error(F_parameter);
-      if (range->start >= buffer.used) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    f_status status = F_none;
-    unsigned short width = 0;
-
-    f_string_length width_max = (range->stop - range->start) + 1;
-
-    if (width_max > buffer.used - range->start) {
-      width_max = buffer.used - range->start;
-    }
-
-    for (;;) {
-      if (buffer.string[range->start] != f_fss_delimit_placeholder) {
-        status = f_utf_is_whitespace(buffer.string + range->start, width_max);
-
-        if (status == F_false) {
-          status = f_utf_is_control(buffer.string + range->start, width_max);
-
-          if (status == F_false) {
-            status = f_utf_is_zero_width(buffer.string + range->start, width_max);
-
-            if (status == F_true) {
-              f_string_length next_width_max = 0;
-
-              for (f_string_length next = range->start + 1; next < buffer.used && next <= range->stop; next += f_macro_utf_byte_width_is(buffer.string[next])) {
-                next_width_max = (range->stop - next) + 1;
-
-                status = f_utf_is_whitespace(buffer.string + next, width_max);
-                if (status == F_true) {
-                  // treat zero-width before a space like a space.
-                  break;
-                }
-                else if (status == F_false) {
-                  status = f_utf_is_control(buffer.string + next, width_max);
-
-                  if (status == F_true) {
-                    // treat zero-width before a control character like a space.
-                    break;
-                  }
-                  else if (status == F_false) {
-                    status = f_utf_is_zero_width(buffer.string + next, width_max);
-
-                    if (status == F_true) {
-                      // seek until a non-zero-width is reached.
-                      continue;
-                    }
-                    else if (status == F_false) {
-                      // treat zero-width as a non-whitespace non-control character when preceding a non-whitespace non-control character.
-                      return F_none;
-                    }
-                  }
-                  else if (F_status_is_error(status)) return status;
-                }
-                else if (F_status_is_error(status)) return status;
-              } // for
-            }
-            else if (status == F_false) {
-              // treat zero-width as a graph when preceding a non-whitespace non-control (that is not a zero-width).
-              return F_none;
-            }
-            else if (F_status_is_error(status)) return status;
-          }
-          else if (F_status_is_error(status)) return status;
-        }
-        else if (F_status_is_error(status)) return status;
-      }
-
-      if (buffer.string[range->start] == f_string_eol[0]) return F_none_eol;
-
-      width = f_macro_utf_byte_width_is(buffer.string[range->start]);
-
-      if (width == 0) {
-        width = 1;
-      }
-      // Do not operate on UTF-8 fragments that are not the first byte of the character.
-      else if (width == 1) {
-        return F_status_set_error(F_incomplete_utf);
-      }
-      else {
-        if (range->start + width >= buffer.used) return F_status_set_error(F_incomplete_utf_eos);
-        if (range->start + width > range->stop) return F_status_set_error(F_incomplete_utf_stop);
-      }
-
-      range->start += width;
-
-      if (range->start >= buffer.used) return F_none_eos;
-      if (range->start > range->stop) return F_none_stop;
-
-      width_max = (range->stop - range->start) + 1;
-
-      if (width_max > buffer.used - range->start) {
-        width_max = buffer.used - range->start;
-      }
-    } // for
-
-    if (F_status_is_error(status)) return status;
-
-    return F_none;
-  }
-#endif // _di_fl_fss_skip_past_space_
-
-#ifndef _di_fl_fss_skip_past_non_graph_
-  f_return_status fl_fss_skip_past_non_graph(const f_string_static buffer, f_string_range *range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (buffer.used <= 0) return F_status_set_error(F_parameter);
-      if (range == 0) return F_status_set_error(F_parameter);
-      if (range->start < 0) return F_status_set_error(F_parameter);
-      if (range->stop < range->start) return F_status_set_error(F_parameter);
-      if (range->start >= buffer.used) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    f_status status = F_none;
-    unsigned short width = 0;
-
-    f_string_length width_max = (range->stop - range->start) + 1;
-
-    if (width_max > buffer.used - range->start) {
-      width_max = buffer.used - range->start;
-    }
-
-    for (;;) {
-      if (buffer.string[range->start] != f_fss_delimit_placeholder) {
-        status = f_utf_is_graph(buffer.string + range->start, width_max);
-
-        if (status == F_true) {
-          // stop at a graph.
-          break;
-        }
-        else if (status == F_false) {
-          status = f_utf_is_zero_width(buffer.string + range->start, width_max);
-
-          if (status == F_true) {
-            f_string_length next_width_max = 0;
-
-            for (f_string_length next = range->start + 1; next < buffer.used && next <= range->stop; next += f_macro_utf_byte_width_is(buffer.string[next])) {
-              next_width_max = (range->stop - next) + 1;
-
-              status = f_utf_is_graph(buffer.string + next, width_max);
-              if (status == F_true) {
-                // treat zero-width as a graph when preceding a graph.
-                return F_none;
-              }
-              else if (status == F_false) {
-                status = f_utf_is_zero_width(buffer.string + next, width_max);
-
-                if (status == F_true) {
-                  // seek until a non-zero-width is reached.
-                  continue;
-                }
-                else if (status == F_false) {
-                  // treat zero-width as a non-graph when preceding a non-graph (that is not a zero-width).
-                  break;
-                }
-                else if (F_status_is_error(status)) return status;
-              }
-              else if (F_status_is_error(status)) return status;
-            } // for
-          }
-          else if (status == F_false) {
-            // continue on when non-graph and non-zero-width.
-            break;
-          }
-          else if (F_status_is_error(status)) return status;
-        }
-        else if (F_status_is_error(status)) return status;
-      }
-
-      if (F_status_is_error(status)) return status;
-
-      width = f_macro_utf_byte_width_is(buffer.string[range->start]);
-
-      if (width == 0) {
-        width = 1;
-      }
-      // Do not operate on UTF-8 fragments that are not the first byte of the character.
-      else if (width == 1) {
-        return F_status_set_error(F_incomplete_utf);
-      }
-      else {
-        if (range->start + width >= buffer.used) return F_status_set_error(F_incomplete_utf_eos);
-        if (range->start + width > range->stop) return F_status_set_error(F_incomplete_utf_stop);
-      }
-
-      range->start += width;
-
-      if (range->start >= buffer.used) return F_none_eos;
-      if (range->start > range->stop) return F_none_stop;
-
-      width_max = (range->stop - range->start) + 1;
-
-      if (width_max > buffer.used - range->start) {
-        width_max = buffer.used - range->start;
-      }
-    } // for
-
-    if (F_status_is_error(status)) {
-      return status;
-    }
-
-    return F_none;
-  }
-#endif // _di_fl_fss_skip_past_non_graph_
-
 #ifdef __cplusplus
 } // extern "C"
 #endif
index d37ee9ea57937e7448fd10a9e961abd658b27c0e..8658ec8326723aa7f1605c8f828c4b7bb2c96b52 100644 (file)
@@ -29,34 +29,6 @@ extern "C" {
 #endif
 
 /**
- * Continue to the previous character, based on step and character width.
- *
- * The start position must be at the start of a valid UTF-8 block.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   The start and stop positions to be incremented.
- *   The start position will be incremented by step.
- * @param step
- *   The number of steps to decrement the start position.
- *   The steps refer to characters and not integers.
- *   Essentially this number is considered against the width of every character found.
- *   (For ASCII each step would be (sizeof(int8_t), which is 1).
- *   (For UTF-8 character of width 3, each step would be (3 * sizeof(int8_t)).
- *
- * @return
- *   F_none on success.
- *   F_none_stop if the stop range is reached before all steps are completed.
- *   F_none_eos if the end of buffer is reached before all steps are completed.
- *   F_incomplete_utf_eos (with error bit) if the end of buffer is reached before the complete UTF-8 character can be processed.
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_fss_decrement_buffer_
-  extern f_return_status fl_fss_decrement_buffer(const f_string_static buffer, f_string_range *range, const f_string_length step);
-#endif // _di_fl_fss_decrement_buffer_
-
-/**
  * Identify FSS type from a buffered string.
  *
  * @param buffer
@@ -86,12 +58,15 @@ extern "C" {
  *
  * @return
  *   F_none on success.
+ *   FL_fss_header_not if no header is found.
+ *   FL_fss_accepted_invalid (with warning bit) if header is technically invalid but can be identified.
  *   F_memory_reallocation (with error bit) on memory reallocation error.
  *   F_parameter (with error bit) if a parameter is invalid.
+ *   FL_fss_header_not (with error bit) if the an error occurred prior to identifying a valid header.
  *
+ *   Errors from (with error bit): f_conversion_string_to_hexidecimal_unsigned().
  *   Errors from (with error bit): f_file_read_until().
  *   Errors from (with error bit): f_file_seek().
- *   Errors from (with error bit): fl_fss_identify()
  *
  * @see f_file_read_until()
  * @see fl_fss_identify()
@@ -100,157 +75,6 @@ extern "C" {
   extern f_return_status fl_fss_identify_file(f_file *file, f_fss_header *header);
 #endif // _di_fl_fss_identify_file_
 
-/**
- * Continue to the next character, based on step and character width.
- *
- * The start position must be at the start of a valid UTF-8 block.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   The start and stop positions to be incremented.
- *   The start position will be incremented by step.
- * @param step
- *   The number of steps to increment the start position.
- *   The steps refer to characters and not integers.
- *   Essentially this number is considered against the width of every character found.
- *   (For ASCII each step would be (sizeof(int8_t), which is 1).
- *   (For UTF-8 character of width 3, each step would be (3 * sizeof(int8_t)).
- *
- * @return
- *   F_none on success.
- *   F_none_stop if the stop range is reached before all steps are completed.
- *   F_none_eos if the end of buffer is reached before all steps are completed.
- *   F_incomplete_utf_stop (with error bit) if the stop range is reached before the complete UTF-8 character can be processed.
- *   F_incomplete_utf_eos (with error bit) if the end of buffer is reached before the complete UTF-8 character can be processed.
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_fss_increment_buffer_
-  extern f_return_status fl_fss_increment_buffer(const f_string_static buffer, f_string_range *range, const f_string_length step);
-#endif // _di_fl_fss_increment_buffer_
-
-/**
- * Identify whether or not a character in the buffer is a graph (ASCII or UTF-8) character.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   The character at the start position will be checked against the graph.
- * @param header
- *   The header data to populate with results of this function.
- *
- * @return
- *   F_true if the character in the buffer is a graph character.
- *   F_false if the character in the buffer is not a graph character.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors from (with error bit): f_utf_is_graph().
- */
-#ifndef _di_fl_fss_is_graph_
-  extern f_return_status fl_fss_is_graph(const f_string_static buffer, const f_string_range range);
-#endif // _di_fl_fss_is_graph_
-
-/**
- * Identify whether or not a character in the buffer is a space (ASCII or UTF-8) character.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   The character at the start position will be checked against the graph.
- * @param header
- *   The header data to populate with results of this function.
- *
- * @return
- *   F_true if the character in the buffer is a space character.
- *   F_false if the character in the buffer is not a space character.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors from (with error bit): f_utf_is_space().
- */
-#ifndef _di_fl_fss_is_space_
-  extern f_return_status fl_fss_is_space(const f_string_static buffer, const f_string_range range);
-#endif // _di_fl_fss_is_space_
-
-/**
- * Shift all of the delimiters to the end of the used buffer.
- *
- * This allows one to do a printf on the dynamic string without the delimiters arbitrarily stopping the output.
- * No reallocations are performed, this will only shift characters.
- *
- * @param buffer
- *   The string to process.
- *   This gets updated.
- * @param range
- *   A restriction on where within the buffer the shifting happens.
- *
- * @return
- *   F_none on success.
- *   F_utf (with error bit) if UTF-8 cannot be fully processed (buffer or range range not long enough).
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_fss_shift_delimiters_
-  extern f_return_status fl_fss_shift_delimiters(f_string_dynamic *buffer, const f_string_range range);
-#endif // _di_fl_fss_shift_delimiters_
-
-/**
- * Skip past all whitespace and control characters, except newline.
- *
- * Zero-width characters are not skipped because they might be part of a graph character, such as combining characters.
- * @todo needs consideration on how to handle zero-width before space/control vs zero-width before graph.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   The start and stop positions in the buffer being processed.
- *   This increments range->start.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success and EOL was reached.
- *   F_none_eos on success and EOS was reached.
- *   F_none_stop on success and stop point was reached.
- *   F_incomplete_utf (with error bit) if an incomplete UTF-8 fragment was found.
- *   F_incomplete_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS.
- *   F_incomplete_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors from (with error bit): f_utf_is_control().
- *   Errors from (with error bit): f_utf_is_whitespace().
- *   Errors from (with error bit): f_utf_is_zero_width().
- */
-#ifndef _di_fl_fss_skip_past_space_
-  extern f_return_status fl_fss_skip_past_space(const f_string_static buffer, f_string_range *range);
-#endif // _di_fl_fss_skip_past_space_
-
-/**
- * Skip past all non-graph and non-zero-width characters (whitespace and control characters).
- *
- * Zero-width characters are not skipped because they might be part of a graph character, such as combining characters.
- * @todo needs consideration on how to handle zero-width before space/control vs zero-width before graph.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   The start and stop positions in the buffer being processed.
- *   This increments range->start.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success and EOL was reached.
- *   F_none_eos on success and EOS was reached.
- *   F_none_stop on success and stop point was reached.
- *   F_incomplete_utf (with error bit) if an incomplete UTF-8 fragment was found.
- *   F_incomplete_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS.
- *   F_incomplete_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors from (with error bit): f_utf_is_graph().
- *   Errors from (with error bit): f_utf_is_zero_width().
- */
-#ifndef _di_fl_fss_skip_past_non_graph_
-  extern f_return_status fl_fss_skip_past_non_graph(const f_string_static buffer, f_string_range *range);
-#endif // _di_fl_fss_skip_past_non_graph_
-
 #ifdef __cplusplus
 } // extern "C"
 #endif
index 69b8cbc42dd96ee3025fed1ea5594fabcd6edfba..a23db519a525d6eef798a66c9c5931bec013a766 100644 (file)
@@ -21,14 +21,14 @@ extern "C" {
     // delimits must only be applied once a valid object is found
     f_string_lengths delimits = f_string_lengths_initialize;
 
-    status = fl_fss_skip_past_space(*buffer, location);
+    status = f_fss_skip_past_space(*buffer, location);
     if (F_status_is_error(status)) return status;
 
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
     // return found nothing if this line only contains whitespace and delimit placeholders
     if (buffer->string[location->start] == f_fss_basic_close) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -45,7 +45,7 @@ extern "C" {
     if (buffer->string[location->start] == f_fss_comment) {
       fl_macro_fss_object_seek_till_newline((*buffer), (*location), delimits, F_data_not_eos, F_data_not_stop)
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -58,23 +58,23 @@ extern "C" {
     if (buffer->string[location->start] == f_fss_delimit_slash) {
       f_string_length last_slash = location->start;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       while (location->start <= location->stop && location->start < buffer->used) {
         if (buffer->string[location->start] == f_fss_delimit_placeholder) {
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           continue;
         }
         else {
-          status = fl_fss_is_graph(*buffer, *location);
+          status = f_fss_is_graph(*buffer, *location);
           if (status == F_false) {
             found->stop = location->start - 1;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             return FL_fss_found_object;
@@ -89,7 +89,7 @@ extern "C" {
 
         last_slash = location->start;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -108,14 +108,14 @@ extern "C" {
         delimits.array[delimits.used] = last_slash;
         delimits.used++;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       }
     }
     else if (buffer->string[location->start] == f_fss_delimit_single_quote || buffer->string[location->start] == f_fss_delimit_double_quote) {
       quoted = buffer->string[location->start];
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       found->start = location->start;
@@ -124,8 +124,8 @@ extern "C" {
     // identify where the object ends
     if (quoted == 0) {
       status = F_none;
-      while (buffer->string[location->start] == f_fss_delimit_placeholder || (status = fl_fss_is_space(*buffer, *location)) == F_false) {
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+      while (buffer->string[location->start] == f_fss_delimit_placeholder || (status = f_fss_is_space(*buffer, *location)) == F_false) {
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         fl_macro_fss_object_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
@@ -133,7 +133,7 @@ extern "C" {
 
       if (F_status_is_error(status)) return status;
 
-      status = fl_fss_is_space(*buffer, *location);
+      status = f_fss_is_space(*buffer, *location);
       if (status == F_true) {
         found->stop = location->start - 1;
 
@@ -144,7 +144,7 @@ extern "C" {
           return FL_fss_found_object_content_not;
         }
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         return FL_fss_found_object;
@@ -159,14 +159,14 @@ extern "C" {
           f_string_length first_slash = location->start;
           f_string_length slash_count = 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
 
           while (location->start <= location->stop && location->start < buffer->used) {
             if (buffer->string[location->start] == f_fss_delimit_placeholder) {
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               continue;
@@ -177,7 +177,7 @@ extern "C" {
 
             slash_count++;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -208,7 +208,7 @@ extern "C" {
                   slash_count--;
                 }
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
@@ -217,9 +217,9 @@ extern "C" {
               fl_macro_fss_skip_past_delimit_placeholders((*buffer), (*location))
               fl_macro_fss_object_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
 
-              if ((status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+              if ((status = f_fss_is_graph(*buffer, *location)) == F_true) {
                 while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-                  status = fl_fss_increment_buffer(*buffer, location, 1);
+                  status = f_fss_increment_buffer(*buffer, location, 1);
                   if (F_status_is_error(status)) return status;
                 } // while
 
@@ -227,7 +227,7 @@ extern "C" {
 
                 f_macro_string_lengths_delete_simple(delimits);
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
                 return FL_fss_found_object_not;
@@ -247,7 +247,7 @@ extern "C" {
 
               found->stop = length - 1;
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               return FL_fss_found_object;
@@ -272,7 +272,7 @@ extern "C" {
                   slash_count--;
                 }
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
@@ -283,7 +283,7 @@ extern "C" {
         else if (buffer->string[location->start] == quoted) {
           found->stop = location->start - 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start <= location->stop && location->start < buffer->used) {
@@ -293,10 +293,10 @@ extern "C" {
               location->start++;
               return FL_fss_found_object_content_not;
             }
-            else if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
+            else if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
               fl_macro_fss_apply_delimit_placeholders((*buffer), delimits);
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               return FL_fss_found_object;
@@ -307,7 +307,7 @@ extern "C" {
             else if (buffer->string[location->start] != f_fss_delimit_placeholder) {
               while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
               } // while
@@ -316,13 +316,13 @@ extern "C" {
 
               f_macro_string_lengths_delete_simple(delimits);
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               return FL_fss_found_object_not;
             }
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -335,7 +335,7 @@ extern "C" {
           return FL_fss_found_object_not;
         }
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -344,7 +344,7 @@ extern "C" {
 
     // seek to the end of the line when no valid object is found
     while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -352,7 +352,7 @@ extern "C" {
 
     f_macro_string_lengths_delete_simple(delimits);
 
-    status = fl_fss_increment_buffer(*buffer, location, 1);
+    status = f_fss_increment_buffer(*buffer, location, 1);
     if (F_status_is_error(status)) return status;
 
     return FL_fss_found_object_not;
@@ -376,7 +376,7 @@ extern "C" {
     // delimits must only be applied once a valid object is found
     f_string_lengths delimits = f_string_lengths_initialize;
 
-    fl_fss_skip_past_space(*buffer, location);
+    f_fss_skip_past_space(*buffer, location);
     if (F_status_is_error(status)) return status;
 
     fl_macro_fss_content_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
@@ -404,7 +404,7 @@ extern "C" {
     found->array[found->used].stop = location->start - 1;
     found->used++;
 
-    status = fl_fss_increment_buffer(*buffer, location, 1);
+    status = f_fss_increment_buffer(*buffer, location, 1);
     if (F_status_is_error(status)) return status;
 
     return FL_fss_found_content;
@@ -445,7 +445,7 @@ extern "C" {
     if (object.string[location->start] == f_fss_delimit_slash) {
       while (location->start <= location->stop && location->start < object.used) {
         if (object.string[location->start] == f_fss_delimit_placeholder) {
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           continue;
@@ -457,7 +457,7 @@ extern "C" {
         buffer->string[buffer_position.stop] = object.string[location->start];
         buffer_position.stop++;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -473,7 +473,7 @@ extern "C" {
         buffer->string[buffer_position.stop + 1] = object.string[location->start];
         buffer_position.stop += 2;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       }
     }
@@ -490,7 +490,7 @@ extern "C" {
       buffer->string[buffer_position.stop + 1] = object.string[location->start];
       buffer_position.stop += 2;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     }
     else if (object.string[location->start] == f_fss_comment) {
@@ -499,7 +499,7 @@ extern "C" {
 
     while (location->start <= location->stop && location->start < object.used) {
       if (object.string[location->start] == f_fss_delimit_placeholder) {
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         continue;
@@ -515,7 +515,7 @@ extern "C" {
 
         return F_none_eol;
       }
-      else if ((status = fl_fss_is_space(*buffer, *location)) == F_true || quoted) {
+      else if ((status = f_fss_is_space(*buffer, *location)) == F_true || quoted) {
         pre_allocate_size++;
 
         if (pre_allocate_size > buffer->size) {
@@ -532,7 +532,7 @@ extern "C" {
 
         while (location->start <= location->stop && location->start < object.used) {
           if (object.string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
@@ -556,7 +556,7 @@ extern "C" {
               buffer_position.stop++;
               slash_count++;
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               fl_macro_fss_skip_past_delimit_placeholders(object, (*location));
@@ -601,7 +601,7 @@ extern "C" {
 
           buffer->string[buffer_position.stop] = object.string[location->start];
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           buffer_position.stop++;
@@ -618,7 +618,7 @@ extern "C" {
 
       buffer->string[buffer_position.stop] = object.string[location->start];
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       buffer_position.stop++;
@@ -676,7 +676,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
index 4f387b62ba9d376c75e1f0a71b49e21aa4087233..b4255b470d0ab82c110894a41bf472d866b6c45f 100644 (file)
@@ -64,10 +64,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_basic_object_read_
   extern f_return_status fl_fss_basic_object_read(f_string_dynamic *buffer, f_string_range *location, f_fss_object *found);
@@ -106,10 +106,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_basic_content_read_
   extern f_return_status fl_fss_basic_content_read(f_string_dynamic *buffer, f_string_range *location, f_fss_content *found);
@@ -141,7 +141,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_basic_object_write_
   extern f_return_status fl_fss_basic_object_write(f_string_dynamic *buffer, const f_string_static object, f_string_range *location);
@@ -172,7 +172,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_basic_content_write_
   extern f_return_status fl_fss_basic_content_write(f_string_dynamic *buffer, const f_string_static content, f_string_range *location);
index a5990a8e8613e65a606c0e54958929df2ddbdc07..4216c67791059a16cf2883d76828533fd5d36b5a 100644 (file)
@@ -21,7 +21,7 @@ extern "C" {
     // delimits must only be applied once a valid object is found.
     f_string_lengths delimits = f_string_lengths_initialize;
 
-    fl_fss_skip_past_space(*buffer, location);
+    f_fss_skip_past_space(*buffer, location);
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
     // return found nothing if this line only contains whitespace and delimit placeholders.
@@ -37,7 +37,7 @@ extern "C" {
     if (buffer->string[location->start] == f_fss_comment) {
       fl_macro_fss_object_seek_till_newline((*buffer), (*location), delimits, F_data_not_eos, F_data_not_stop)
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -49,7 +49,7 @@ extern "C" {
         f_string_length first_slash = location->start;
         f_string_length slash_count = 1;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < buffer->used && location->start <= location->stop && (buffer->string[location->start] == f_fss_delimit_placeholder || buffer->string[location->start] == f_fss_delimit_slash)) {
@@ -57,7 +57,7 @@ extern "C" {
             slash_count++;
           }
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -66,17 +66,17 @@ extern "C" {
         if (buffer->string[location->start] == f_fss_basic_list_open) {
           f_string_length stop_point = location->start - 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start < buffer->used && location->start <= location->stop) {
-            if (buffer->string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+            if (buffer->string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
               break;
             }
 
             if (F_status_is_error(status)) return status;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -107,7 +107,7 @@ extern "C" {
                   slash_count--;
                 }
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
@@ -129,17 +129,17 @@ extern "C" {
       else if (buffer->string[location->start] == f_fss_basic_list_open) {
         f_string_length stop_point = location->start - 1;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < buffer->used && location->start <= location->stop) {
-          if (buffer->string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+          if (buffer->string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
             break;
           }
 
           if (F_status_is_error(status)) return status;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -150,7 +150,7 @@ extern "C" {
 
           found->stop = stop_point;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           return FL_fss_found_object;
@@ -159,19 +159,19 @@ extern "C" {
         continue;
       }
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
     // seek to the end of the line when no valid object is found.
     while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
-    status = fl_fss_increment_buffer(*buffer, location, 1);
+    status = f_fss_increment_buffer(*buffer, location, 1);
     if (F_status_is_error(status)) return status;
 
     return FL_fss_found_object_not;
@@ -210,7 +210,7 @@ extern "C" {
         found_newline = F_true;
         last_newline = location->start;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         fl_macro_fss_content_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
@@ -222,7 +222,7 @@ extern "C" {
         f_string_length first_slash = location->start;
         f_string_length slash_count = 1;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < buffer->used && location->start <= location->stop && (buffer->string[location->start] == f_fss_delimit_placeholder || buffer->string[location->start] == f_fss_delimit_slash)) {
@@ -230,7 +230,7 @@ extern "C" {
             slash_count++;
           }
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -244,17 +244,17 @@ extern "C" {
         if (buffer->string[location->start] == f_fss_basic_list_open) {
           f_string_length stop_point = location->start - 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start < buffer->used && location->start <= location->stop) {
-            if (buffer->string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+            if (buffer->string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
               break;
             }
 
             if (F_status_is_error(status)) return status;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -303,7 +303,7 @@ extern "C" {
                 slash_count--;
               }
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
             } // while
 
@@ -315,17 +315,17 @@ extern "C" {
         continue;
       }
       else if (buffer->string[location->start] == f_fss_basic_list_open) {
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < buffer->used && location->start <= location->stop) {
-          if (buffer->string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+          if (buffer->string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
             break;
           }
 
           if (F_status_is_error(status)) return status;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -357,7 +357,7 @@ extern "C" {
         continue;
       }
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -415,7 +415,7 @@ extern "C" {
         // comments are not allowed and this format has no way of "wrapping" a comment.
         return F_status_set_error(FL_fss_found_comment);
       }
-      else if ((status = fl_fss_is_graph(object, *location)) == F_true) {
+      else if ((status = f_fss_is_graph(object, *location)) == F_true) {
         break;
       }
       else if (F_status_is_error(status)) {
@@ -427,7 +427,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(object, location, 1);
+      status = f_fss_increment_buffer(object, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -438,12 +438,12 @@ extern "C" {
         buffer->string[buffer_position.stop] = object.string[location->start];
         buffer_position.stop++;
 
-        status = fl_fss_increment_buffer(object, location, 1);
+        status = f_fss_increment_buffer(object, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start <= location->stop && location->start < object.used) {
           if (object.string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(object, location, 1);
+            status = f_fss_increment_buffer(object, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
@@ -454,7 +454,7 @@ extern "C" {
           buffer->string[buffer_position.stop] = object.string[location->start];
           buffer_position.stop++;
 
-          status = fl_fss_increment_buffer(object, location, 1);
+          status = f_fss_increment_buffer(object, location, 1);
           if (F_status_is_error(status)) return status;
 
           slash_count++;
@@ -490,7 +490,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(object, location, 1);
+      status = f_fss_increment_buffer(object, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -546,12 +546,12 @@ extern "C" {
         buffer_position.stop++;
 
         has_graph = F_true;
-        status = fl_fss_increment_buffer(content, location, 1);
+        status = f_fss_increment_buffer(content, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start <= location->stop && location->start < content.used) {
           if (content.string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(content, location, 1);
+            status = f_fss_increment_buffer(content, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
@@ -563,7 +563,7 @@ extern "C" {
           buffer->string[buffer_position.stop] = content.string[location->start];
           buffer_position.stop++;
 
-          status = fl_fss_increment_buffer(content, location, 1);
+          status = f_fss_increment_buffer(content, location, 1);
           if (F_status_is_error(status)) return status;
 
           slash_count++;
@@ -572,17 +572,17 @@ extern "C" {
         if (content.string[location->start] == f_fss_basic_list_open) {
           f_string_length start = location->start;
 
-          status = fl_fss_increment_buffer(content, location, 1);
+          status = f_fss_increment_buffer(content, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start < content.used && location->start <= location->stop) {
-            if (content.string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(content, *location)) == F_true) {
+            if (content.string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(content, *location)) == F_true) {
               break;
             }
 
             if (F_status_is_error(status)) return status;
 
-            status = fl_fss_increment_buffer(content, location, 1);
+            status = f_fss_increment_buffer(content, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -617,17 +617,17 @@ extern "C" {
 
         has_graph = F_true;
 
-        status = fl_fss_increment_buffer(content, location, 1);
+        status = f_fss_increment_buffer(content, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < content.used && location->start <= location->stop) {
-          if (content.string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(content, *location)) == F_true) {
+          if (content.string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(content, *location)) == F_true) {
             break;
           }
 
           if (F_status_is_error(status)) return status;
 
-          status = fl_fss_increment_buffer(content, location, 1);
+          status = f_fss_increment_buffer(content, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -657,7 +657,7 @@ extern "C" {
         has_graph = F_false;
         is_comment = F_false;
       }
-      else if ((status = fl_fss_is_graph(content, *location)) == F_true) {
+      else if ((status = f_fss_is_graph(content, *location)) == F_true) {
         has_graph = F_true;
       }
       else if (F_status_is_error(status)) {
@@ -669,7 +669,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(content, location, 1);
+      status = f_fss_increment_buffer(content, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
index 833f00fd1ba892aaaa5fb99050fd5d19a3c5d552..7ef20079fb6f5b5e8b87ef3dde25ded2c90f9940 100644 (file)
@@ -65,10 +65,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_basic_list_object_read_
   extern f_return_status fl_fss_basic_list_object_read(f_string_dynamic *buffer, f_string_range *location, f_fss_object *found);
@@ -107,10 +107,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_basic_list_content_read_
   extern f_return_status fl_fss_basic_list_content_read(f_string_dynamic *buffer, f_string_range *location, f_fss_content *found);
@@ -142,7 +142,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_basic_list_object_write_
   extern f_return_status fl_fss_basic_list_object_write(const f_string_static object, f_string_range *location, f_string_dynamic *buffer);
@@ -173,7 +173,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_basic_list_content_write_
   extern f_return_status fl_fss_basic_list_content_write(const f_string_static content, f_string_range *location, f_string_dynamic *buffer);
index 324114487638a4d1f922794b4f4f1b5719e748dc..a3d5621f0d7d174082ae39f337538ad7f1cc3c46 100644 (file)
@@ -21,12 +21,12 @@ extern "C" {
     // delimits must only be applied once a valid object is found
     f_string_lengths delimits = f_string_lengths_initialize;
 
-    fl_fss_skip_past_space(*buffer, location);
+    f_fss_skip_past_space(*buffer, location);
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
     // return found nothing if this line only contains whitespace and delimit placeholders
     if (buffer->string[location->start] == f_fss_extended_close) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -43,7 +43,7 @@ extern "C" {
     if (buffer->string[location->start] == f_fss_comment) {
       fl_macro_fss_object_seek_till_newline((*buffer), (*location), delimits, F_data_not_eos, F_data_not_stop)
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -56,20 +56,20 @@ extern "C" {
     if (buffer->string[location->start] == f_fss_delimit_slash) {
       f_string_length last_slash = location->start;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       while (location->start <= location->stop && location->start < buffer->used) {
         if (buffer->string[location->start] == f_fss_delimit_placeholder) {
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           continue;
         }
-        else if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
+        else if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
           found->stop = location->start - 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           return FL_fss_found_object;
@@ -83,7 +83,7 @@ extern "C" {
 
         last_slash = location->start;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -102,14 +102,14 @@ extern "C" {
         delimits.array[delimits.used] = last_slash;
         delimits.used++;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       }
     }
     else if (buffer->string[location->start] == f_fss_delimit_single_quote || buffer->string[location->start] == f_fss_delimit_double_quote) {
       quoted = buffer->string[location->start];
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       found->start = location->start;
@@ -118,8 +118,8 @@ extern "C" {
     // identify where the object ends
     if (quoted == 0) {
       status = F_none;
-      while (buffer->string[location->start] == f_fss_delimit_placeholder || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+      while (buffer->string[location->start] == f_fss_delimit_placeholder || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         fl_macro_fss_object_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
@@ -127,7 +127,7 @@ extern "C" {
 
       if (F_status_is_error(status)) return status;
 
-      if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
+      if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
         found->stop = location->start - 1;
 
         fl_macro_fss_apply_delimit_placeholders((*buffer), delimits);
@@ -137,7 +137,7 @@ extern "C" {
           return FL_fss_found_object_content_not;
         }
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         return FL_fss_found_object;
@@ -152,12 +152,12 @@ extern "C" {
           f_string_length first_slash = location->start;
           f_string_length slash_count = 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start <= location->stop && location->start < buffer->used) {
             if (buffer->string[location->start] == f_fss_delimit_placeholder) {
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               continue;
@@ -168,7 +168,7 @@ extern "C" {
 
             slash_count++;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -199,7 +199,7 @@ extern "C" {
                   slash_count--;
                 }
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
@@ -208,15 +208,15 @@ extern "C" {
               fl_macro_fss_skip_past_delimit_placeholders((*buffer), (*location))
               fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_status_is_warning(F_unterminated_group_eos), F_status_is_warning(F_unterminated_group_stop))
 
-              if ((status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+              if ((status = f_fss_is_graph(*buffer, *location)) == F_true) {
                 while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-                  status = fl_fss_increment_buffer(*buffer, location, 1);
+                  status = f_fss_increment_buffer(*buffer, location, 1);
                   if (F_status_is_error(status)) return status;
                 } // while
 
                 fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
                 return FL_fss_found_object_not;
@@ -236,7 +236,7 @@ extern "C" {
 
               found->stop = length - 1;
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               return FL_fss_found_object;
@@ -261,7 +261,7 @@ extern "C" {
                   slash_count--;
                 }
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
@@ -272,7 +272,7 @@ extern "C" {
         else if (buffer->string[location->start] == quoted) {
           found->stop = location->start - 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start <= location->stop && location->start < buffer->used) {
@@ -282,10 +282,10 @@ extern "C" {
               location->start++;
               return FL_fss_found_object_content_not;
             }
-            else if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
+            else if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
               fl_macro_fss_apply_delimit_placeholders((*buffer), delimits);
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               return FL_fss_found_object;
@@ -295,19 +295,19 @@ extern "C" {
             }
             else if (buffer->string[location->start] != f_fss_delimit_placeholder) {
               while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
               fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               return FL_fss_found_object_not;
             }
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -318,7 +318,7 @@ extern "C" {
           return FL_fss_found_object_not;
         }
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -327,13 +327,13 @@ extern "C" {
 
     // seek to the end of the line when no valid object is found
     while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
-    status = fl_fss_increment_buffer(*buffer, location, 1);
+    status = f_fss_increment_buffer(*buffer, location, 1);
     if (F_status_is_error(status)) return status;
 
     return FL_fss_found_object_not;
@@ -357,12 +357,12 @@ extern "C" {
     // delimits must only be applied once a valid object is found
     f_string_lengths delimits = f_string_lengths_initialize;
 
-    fl_fss_skip_past_space(*buffer, location);
+    f_fss_skip_past_space(*buffer, location);
     fl_macro_fss_content_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
 
     // return found nothing if this line only contains whitespace and delimit placeholders
     if (buffer->string[location->start] == f_fss_extended_close) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_content_not;
@@ -396,21 +396,21 @@ extern "C" {
       if (buffer->string[location->start] == f_fss_delimit_slash) {
         f_string_length last_slash = location->start;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
 
         while (location->start <= location->stop && location->start < buffer->used) {
           if (buffer->string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
           }
-          else if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
+          else if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
             found->array[found->used].stop = location->start - 1;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             found->used++;
@@ -432,7 +432,7 @@ extern "C" {
 
           last_slash = location->start;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -456,14 +456,14 @@ extern "C" {
           delimits.array[delimits.used] = last_slash;
           delimits.used++;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         }
       }
       else if (buffer->string[location->start] == f_fss_delimit_single_quote || buffer->string[location->start] == f_fss_delimit_double_quote) {
         quoted = buffer->string[location->start];
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         found->array[found->used].start = location->start;
@@ -472,8 +472,8 @@ extern "C" {
       // identify where the content ends
       if (quoted == 0) {
         status = F_none;
-        while (buffer->string[location->start] == f_fss_delimit_placeholder || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+        while (buffer->string[location->start] == f_fss_delimit_placeholder || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           fl_macro_fss_content_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
@@ -481,7 +481,7 @@ extern "C" {
 
         if (F_status_is_error(status)) return status;
 
-        if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
+        if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
           found->array[found->used].stop = location->start - 1;
           found->used++;
 
@@ -492,7 +492,7 @@ extern "C" {
             return FL_fss_found_content;
           }
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           continue;
@@ -507,12 +507,12 @@ extern "C" {
             f_string_length first_slash = location->start;
             f_string_length slash_count = 1;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             while (location->start <= location->stop && location->start < buffer->used) {
               if (buffer->string[location->start] == f_fss_delimit_placeholder) {
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
                 continue;
@@ -523,7 +523,7 @@ extern "C" {
 
               slash_count++;
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
             } // while
 
@@ -553,7 +553,7 @@ extern "C" {
                     slash_count--;
                   }
 
-                  status = fl_fss_increment_buffer(*buffer, location, 1);
+                  status = f_fss_increment_buffer(*buffer, location, 1);
                   if (F_status_is_error(status)) return status;
                 } // while
 
@@ -562,15 +562,15 @@ extern "C" {
                 fl_macro_fss_skip_past_delimit_placeholders((*buffer), (*location))
                 fl_macro_fss_content_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
 
-                if ((status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+                if ((status = f_fss_is_graph(*buffer, *location)) == F_true) {
                   while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-                    status = fl_fss_increment_buffer(*buffer, location, 1);
+                    status = f_fss_increment_buffer(*buffer, location, 1);
                     if (F_status_is_error(status)) return status;
                   } // while
 
                   fl_macro_fss_content_return_on_overflow((*buffer), (*location), (*found), delimits, F_status_is_warning(F_unterminated_group_eos), F_status_is_warning(F_unterminated_group_stop))
 
-                  status = fl_fss_increment_buffer(*buffer, location, 1);
+                  status = f_fss_increment_buffer(*buffer, location, 1);
                   if (F_status_is_error(status)) return status;
 
                   return F_status_is_warning(F_unterminated_group);
@@ -590,7 +590,7 @@ extern "C" {
 
                 found->array[found->used].stop = length - 1;
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
                 found->used++;
@@ -616,7 +616,7 @@ extern "C" {
                     slash_count--;
                   }
 
-                  status = fl_fss_increment_buffer(*buffer, location, 1);
+                  status = f_fss_increment_buffer(*buffer, location, 1);
                   if (F_status_is_error(status)) return status;
                 } // while
 
@@ -626,7 +626,7 @@ extern "C" {
           }
           else if (buffer->string[location->start] == quoted) {
             found->array[found->used].stop = location->start - 1;
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             while (location->start <= location->stop && location->start < buffer->used) {
@@ -637,8 +637,8 @@ extern "C" {
                 found->used++;
                 return FL_fss_found_content;
               }
-              else if ((status = fl_fss_is_space(*buffer, *location)) == F_true) {
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+              else if ((status = f_fss_is_space(*buffer, *location)) == F_true) {
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
                 found->used++;
@@ -650,19 +650,19 @@ extern "C" {
               }
               else if (buffer->string[location->start] != f_fss_delimit_placeholder) {
                 while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-                  status = fl_fss_increment_buffer(*buffer, location, 1);
+                  status = f_fss_increment_buffer(*buffer, location, 1);
                   if (F_status_is_error(status)) return status;
                 } // while
 
                 fl_macro_fss_content_return_on_overflow((*buffer), (*location), (*found), delimits, F_status_is_warning(F_unterminated_group_eos), F_status_is_warning(F_unterminated_group_stop))
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
 
                 return F_status_is_warning(F_unterminated_group);
               }
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
             } // while
 
@@ -681,7 +681,7 @@ extern "C" {
 
               found->array[found->used].stop = location->start - 1;
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               found->used++;
@@ -690,7 +690,7 @@ extern "C" {
             }
           }
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -709,14 +709,14 @@ extern "C" {
 
     // seek to the end of the line when no valid content is found
     while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
     fl_macro_fss_content_delimited_return_on_overflow((*buffer), (*location), (*found), delimits, F_none_eos, F_none_stop)
 
     if (found->used == already_used) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_content_not;
@@ -724,7 +724,7 @@ extern "C" {
 
     fl_macro_fss_apply_delimit_placeholders((*buffer), delimits);
 
-    status = fl_fss_increment_buffer(*buffer, location, 1);
+    status = f_fss_increment_buffer(*buffer, location, 1);
     if (F_status_is_error(status)) return status;
 
     return FL_fss_found_content;
@@ -765,7 +765,7 @@ extern "C" {
     if (object.string[location->start] == f_fss_delimit_slash) {
       while (location->start <= location->stop && location->start < object.used) {
         if (object.string[location->start] == f_fss_delimit_placeholder) {
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           continue;
@@ -776,7 +776,7 @@ extern "C" {
         buffer->string[buffer_position.stop] = object.string[location->start];
         buffer_position.stop++;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -793,7 +793,7 @@ extern "C" {
         buffer->string[buffer_position.stop + 1] = object.string[location->start];
         buffer_position.stop += 2;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       }
     }
@@ -809,7 +809,7 @@ extern "C" {
       buffer->string[buffer_position.stop + 1] = object.string[location->start];
       buffer_position.stop += 2;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     }
     else if (object.string[location->start] == f_fss_comment) {
@@ -818,7 +818,7 @@ extern "C" {
 
     while (location->start <= location->stop && location->start < object.used) {
       if (object.string[location->start] == f_fss_delimit_placeholder) {
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         continue;
@@ -834,15 +834,15 @@ extern "C" {
 
         return F_none_eol;
       }
-      else if ((status = fl_fss_is_space(*buffer, *location)) == F_true || quoted) {
+      else if ((status = f_fss_is_space(*buffer, *location)) == F_true || quoted) {
         f_string_length first_space = location->start;
 
         if (!quoted) {
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start <= location->stop && location->start < object.used && isspace(object.string[location->start])) {
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -870,7 +870,7 @@ extern "C" {
 
         while (location->start <= location->stop && location->start < object.used) {
           if (object.string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
@@ -895,7 +895,7 @@ extern "C" {
               buffer_position.stop++;
               slash_count++;
 
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               fl_macro_fss_skip_past_delimit_placeholders(object, (*location));
@@ -940,7 +940,7 @@ extern "C" {
 
           buffer->string[buffer_position.stop] = object.string[location->start];
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           buffer_position.stop++;
@@ -957,7 +957,7 @@ extern "C" {
 
       buffer->string[buffer_position.stop] = object.string[location->start];
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       buffer_position.stop++;
@@ -1011,12 +1011,12 @@ extern "C" {
       buffer->string[buffer_position.stop] = f_fss_delimit_slash;
       buffer_position.stop++;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       while (location->start <= location->stop && location->start < content.used) {
         if (content.string[location->start] == f_fss_delimit_placeholder) {
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           continue;
@@ -1029,7 +1029,7 @@ extern "C" {
         buffer->string[buffer_position.stop] = f_fss_delimit_slash;
         buffer_position.stop++;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
@@ -1056,7 +1056,7 @@ extern "C" {
         buffer->string[buffer_position.stop + 1] = content.string[location->start];
         buffer_position.stop += 2;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       }
     }
@@ -1072,7 +1072,7 @@ extern "C" {
       buffer->string[buffer_position.stop + 1] = content.string[location->start];
       buffer_position.stop += 2;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     }
 
@@ -1083,7 +1083,7 @@ extern "C" {
         return F_none_eol;
       }
 
-      if (content.string[location->start] != f_fss_delimit_placeholder && (status = fl_fss_is_space(*buffer, *location)) == F_true) {
+      if (content.string[location->start] != f_fss_delimit_placeholder && (status = f_fss_is_space(*buffer, *location)) == F_true) {
         quoted = f_fss_delimit_double_quote;
 
         pre_allocate_size += 2;
@@ -1106,7 +1106,7 @@ extern "C" {
       buffer->string[buffer_position.stop] = content.string[location->start];
       buffer_position.stop++;
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -1118,12 +1118,12 @@ extern "C" {
           buffer->string[buffer_position.stop] = f_fss_delimit_slash;
           buffer_position.stop++;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start <= location->stop && location->start < content.used) {
             if (content.string[location->start] == f_fss_delimit_placeholder) {
-              status = fl_fss_increment_buffer(*buffer, location, 1);
+              status = f_fss_increment_buffer(*buffer, location, 1);
               if (F_status_is_error(status)) return status;
 
               continue;
@@ -1137,7 +1137,7 @@ extern "C" {
             buffer_position.stop++;
             slash_count++;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -1191,7 +1191,7 @@ extern "C" {
           buffer_position.stop++;
         }
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
       } // while
 
index 3d949fa90a66bba077e7b27eeb35789f3f198e48..6b548aba5733488d5db6da14d6e8d4a11b640b33 100644 (file)
@@ -64,10 +64,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_extended_object_read_
   extern f_return_status fl_fss_extended_object_read(f_string_dynamic *buffer, f_string_range *location, f_fss_object *found);
@@ -106,10 +106,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_extended_content_read_
   extern f_return_status fl_fss_extended_content_read(f_string_dynamic *buffer, f_string_range *location, f_fss_content *found);
@@ -141,7 +141,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_extended_object_write_
   extern f_return_status fl_fss_extended_object_write(const f_string_static object, f_string_range *location, f_string_dynamic *buffer);
@@ -172,7 +172,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_extended_content_write_
   extern f_return_status fl_fss_extended_content_write(const f_string_static content, f_string_range *location, f_string_dynamic *buffer);
index bb33519d720d199e24b240b572979d09f9b89525..daf5e21dca8744cbc930352faf12fecf2b818f15 100644 (file)
@@ -21,12 +21,12 @@ extern "C" {
     // delimits must only be applied once a valid object is found.
     f_string_lengths delimits = f_string_lengths_initialize;
 
-    fl_fss_skip_past_space(*buffer, location);
+    f_fss_skip_past_space(*buffer, location);
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
     // return found nothing if this line only contains whitespace and delimit placeholders.
     if (buffer->string[location->start] == f_string_eol[0]) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -39,7 +39,7 @@ extern "C" {
     if (buffer->string[location->start] == f_fss_comment) {
       fl_macro_fss_object_seek_till_newline((*buffer), (*location), delimits, F_data_not_eos, F_data_not_stop)
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
 
       return FL_fss_found_object_not;
@@ -51,7 +51,7 @@ extern "C" {
         f_string_length first_slash = location->start;
         f_string_length slash_count = 1;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < buffer->used && location->start <= location->stop && (buffer->string[location->start] == f_fss_delimit_placeholder || buffer->string[location->start] == f_fss_delimit_slash)) {
@@ -59,7 +59,7 @@ extern "C" {
             slash_count++;
           }
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -68,17 +68,17 @@ extern "C" {
         if (buffer->string[location->start] == f_fss_extended_list_open) {
           f_string_length stop_point = location->start - 1;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start < buffer->used && location->start <= location->stop) {
-            if (buffer->string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+            if (buffer->string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
               break;
             }
 
             if (F_status_is_error(status)) return status;
 
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -109,7 +109,7 @@ extern "C" {
                   slash_count--;
                 }
 
-                status = fl_fss_increment_buffer(*buffer, location, 1);
+                status = f_fss_increment_buffer(*buffer, location, 1);
                 if (F_status_is_error(status)) return status;
               } // while
 
@@ -131,17 +131,17 @@ extern "C" {
       else if (buffer->string[location->start] == f_fss_extended_list_open) {
         f_string_length stop_point = location->start - 1;
 
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < buffer->used && location->start <= location->stop) {
-          if (buffer->string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(*buffer, *location)) == F_true) {
+          if (buffer->string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(*buffer, *location)) == F_true) {
             break;
           }
 
           if (F_status_is_error(status)) return status;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -152,7 +152,7 @@ extern "C" {
 
           found->stop = stop_point;
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) return status;
 
           return FL_fss_found_object;
@@ -161,19 +161,19 @@ extern "C" {
         continue;
       }
 
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
     // seek to the end of the line when no valid object is found.
     while (location->start < buffer->used && location->start <= location->stop && buffer->string[location->start] != f_string_eol[0]) {
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
     fl_macro_fss_object_return_on_overflow((*buffer), (*location), (*found), delimits, F_data_not_eos, F_data_not_stop)
 
-    status = fl_fss_increment_buffer(*buffer, location, 1);
+    status = f_fss_increment_buffer(*buffer, location, 1);
     if (F_status_is_error(status)) return status;
 
     return FL_fss_found_object_not;
@@ -259,7 +259,7 @@ extern "C" {
         f_string_length slash_count = 1;
 
         position_previous = location->start;
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) {
           f_macro_string_lengths_delete_simple(delimits);
           f_macro_string_lengths_delete_simple(positions_start);
@@ -276,7 +276,7 @@ extern "C" {
             slash_count++;
           }
 
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) {
             f_macro_string_lengths_delete_simple(delimits);
             f_macro_string_lengths_delete_simple(positions_start);
@@ -322,7 +322,7 @@ extern "C" {
               break;
             }
 
-            if (buffer->string[location->start] != f_fss_delimit_placeholder && (status = fl_fss_is_space(*buffer, *location)) == F_false) {
+            if (buffer->string[location->start] != f_fss_delimit_placeholder && (status = f_fss_is_space(*buffer, *location)) == F_false) {
               break;
             }
 
@@ -335,7 +335,7 @@ extern "C" {
             }
 
             position_previous = location->start;
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) {
               f_macro_string_lengths_delete_simple(delimits);
               f_macro_string_lengths_delete_simple(positions_start);
@@ -451,7 +451,7 @@ extern "C" {
         f_string_length before_list_open = position_previous;
 
         position_previous = location->start;
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) {
           f_macro_string_lengths_delete_simple(delimits);
           f_macro_string_lengths_delete_simple(positions_start);
@@ -466,7 +466,7 @@ extern "C" {
             break;
           }
 
-          if (buffer->string[location->start] != f_fss_delimit_placeholder && (status = fl_fss_is_space(*buffer, *location)) == F_false) {
+          if (buffer->string[location->start] != f_fss_delimit_placeholder && (status = f_fss_is_space(*buffer, *location)) == F_false) {
             break;
           }
 
@@ -479,7 +479,7 @@ extern "C" {
           }
 
           position_previous = location->start;
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) {
             f_macro_string_lengths_delete_simple(delimits);
             f_macro_string_lengths_delete_simple(positions_start);
@@ -543,7 +543,7 @@ extern "C" {
             }
 
             position_previous = location->start;
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) {
               f_macro_string_lengths_delete_simple(delimits);
               f_macro_string_lengths_delete_simple(positions_start);
@@ -564,7 +564,7 @@ extern "C" {
       else if (buffer->string[location->start] == f_fss_extended_list_close) {
         while (location->start < buffer->used && location->start <= location->stop) {
           position_previous = location->start;
-          status = fl_fss_increment_buffer(*buffer, location, 1);
+          status = f_fss_increment_buffer(*buffer, location, 1);
           if (F_status_is_error(status)) {
             f_macro_string_lengths_delete_simple(delimits);
             f_macro_string_lengths_delete_simple(positions_start);
@@ -577,7 +577,7 @@ extern "C" {
             break;
           }
 
-          if (buffer->string[location->start] != f_fss_delimit_placeholder && (status = fl_fss_is_space(*buffer, *location)) == F_false) {
+          if (buffer->string[location->start] != f_fss_delimit_placeholder && (status = f_fss_is_space(*buffer, *location)) == F_false) {
             break;
           }
 
@@ -658,7 +658,7 @@ extern "C" {
           line_start = location->start + 1;
 
           if (depth == 0) {
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) {
               f_macro_string_lengths_delete_simple(delimits);
               f_macro_string_lengths_delete_simple(positions_start);
@@ -689,7 +689,7 @@ extern "C" {
             }
 
             position_previous = location->start;
-            status = fl_fss_increment_buffer(*buffer, location, 1);
+            status = f_fss_increment_buffer(*buffer, location, 1);
             if (F_status_is_error(status)) {
               f_macro_string_lengths_delete_simple(delimits);
               f_macro_string_lengths_delete_simple(positions_start);
@@ -709,7 +709,7 @@ extern "C" {
       }
       else if (buffer->string[location->start] != f_string_eol[0]) {
         position_previous = location->start;
-        status = fl_fss_increment_buffer(*buffer, location, 1);
+        status = f_fss_increment_buffer(*buffer, location, 1);
         if (F_status_is_error(status)) {
           f_macro_string_lengths_delete_simple(delimits);
           f_macro_string_lengths_delete_simple(positions_start);
@@ -726,7 +726,7 @@ extern "C" {
       }
 
       position_previous = location->start;
-      status = fl_fss_increment_buffer(*buffer, location, 1);
+      status = f_fss_increment_buffer(*buffer, location, 1);
       if (F_status_is_error(status)) {
         f_macro_string_lengths_delete_simple(delimits);
         f_macro_string_lengths_delete_simple(positions_start);
@@ -789,7 +789,7 @@ extern "C" {
         // comments are not allowed and this format has no way of "wrapping" a comment.
         return F_status_set_error(FL_fss_found_comment);
       }
-      else if ((status = fl_fss_is_graph(object, *location)) == F_true) {
+      else if ((status = f_fss_is_graph(object, *location)) == F_true) {
         break;
       }
       else if (F_status_is_error(status)) {
@@ -801,7 +801,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(object, location, 1);
+      status = f_fss_increment_buffer(object, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -812,12 +812,12 @@ extern "C" {
         buffer->string[buffer_position.stop] = object.string[location->start];
         buffer_position.stop++;
 
-        status = fl_fss_increment_buffer(object, location, 1);
+        status = f_fss_increment_buffer(object, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start <= location->stop && location->start < object.used) {
           if (object.string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(object, location, 1);
+            status = f_fss_increment_buffer(object, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
@@ -828,7 +828,7 @@ extern "C" {
           buffer->string[buffer_position.stop] = object.string[location->start];
           buffer_position.stop++;
 
-          status = fl_fss_increment_buffer(object, location, 1);
+          status = f_fss_increment_buffer(object, location, 1);
           if (F_status_is_error(status)) return status;
 
           slash_count++;
@@ -862,7 +862,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(object, location, 1);
+      status = f_fss_increment_buffer(object, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
@@ -919,12 +919,12 @@ extern "C" {
         buffer_position.stop++;
 
         has_graph = F_true;
-        status = fl_fss_increment_buffer(content, location, 1);
+        status = f_fss_increment_buffer(content, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start <= location->stop && location->start < content.used) {
           if (content.string[location->start] == f_fss_delimit_placeholder) {
-            status = fl_fss_increment_buffer(content, location, 1);
+            status = f_fss_increment_buffer(content, location, 1);
             if (F_status_is_error(status)) return status;
 
             continue;
@@ -936,7 +936,7 @@ extern "C" {
           buffer->string[buffer_position.stop] = content.string[location->start];
           buffer_position.stop++;
 
-          status = fl_fss_increment_buffer(content, location, 1);
+          status = f_fss_increment_buffer(content, location, 1);
           if (F_status_is_error(status)) return status;
 
           slash_count++;
@@ -945,17 +945,17 @@ extern "C" {
         if (content.string[location->start] == f_fss_extended_list_open) {
           f_string_length start = location->start;
 
-          status = fl_fss_increment_buffer(content, location, 1);
+          status = f_fss_increment_buffer(content, location, 1);
           if (F_status_is_error(status)) return status;
 
           while (location->start < content.used && location->start <= location->stop) {
-            if (content.string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(content, *location)) == F_true) {
+            if (content.string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(content, *location)) == F_true) {
               break;
             }
 
             if (F_status_is_error(status)) return status;
 
-            status = fl_fss_increment_buffer(content, location, 1);
+            status = f_fss_increment_buffer(content, location, 1);
             if (F_status_is_error(status)) return status;
           } // while
 
@@ -990,17 +990,17 @@ extern "C" {
 
         has_graph = F_true;
 
-        status = fl_fss_increment_buffer(content, location, 1);
+        status = f_fss_increment_buffer(content, location, 1);
         if (F_status_is_error(status)) return status;
 
         while (location->start < content.used && location->start <= location->stop) {
-          if (content.string[location->start] == f_string_eol[0] || (status = fl_fss_is_graph(content, *location)) == F_true) {
+          if (content.string[location->start] == f_string_eol[0] || (status = f_fss_is_graph(content, *location)) == F_true) {
             break;
           }
 
           if (F_status_is_error(status)) return status;
 
-          status = fl_fss_increment_buffer(content, location, 1);
+          status = f_fss_increment_buffer(content, location, 1);
           if (F_status_is_error(status)) return status;
         } // while
 
@@ -1031,7 +1031,7 @@ extern "C" {
         has_graph = F_false;
         is_comment = F_false;
       }
-      else if ((status = fl_fss_is_graph(content, *location)) == F_true) {
+      else if ((status = f_fss_is_graph(content, *location)) == F_true) {
         has_graph = F_true;
       }
       else if (F_status_is_error(status)) {
@@ -1043,7 +1043,7 @@ extern "C" {
         buffer_position.stop++;
       }
 
-      status = fl_fss_increment_buffer(content, location, 1);
+      status = f_fss_increment_buffer(content, location, 1);
       if (F_status_is_error(status)) return status;
     } // while
 
index cd3708d406b5c9292837b01ec58da490ff0e2026..d0e58f14b7fe03e6330a39f0cfe2dd89ccbe2331 100644 (file)
@@ -65,10 +65,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_extended_list_object_read_
   extern f_return_status fl_fss_extended_list_object_read(f_string_dynamic *buffer, f_string_range *location, f_fss_object *found);
@@ -111,10 +111,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
- *   Errors from (with error bit): fl_fss_is_graph().
- *   Errors from (with error bit): fl_fss_is_space().
- *   Errors from (with error bit): fl_fss_skip_past_space().
+ *   Errors from (with error bit): f_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_is_graph().
+ *   Errors from (with error bit): f_fss_is_space().
+ *   Errors from (with error bit): f_fss_skip_past_space().
  */
 #ifndef _di_fl_fss_extended_list_content_read_
   extern f_return_status fl_fss_extended_list_content_read(f_string_dynamic *buffer, f_string_range *location, f_fss_nest *found);
@@ -146,7 +146,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_extended_list_object_write_
   extern f_return_status fl_fss_extended_list_object_write(const f_string_static object, f_string_range *location, f_string_dynamic *buffer);
@@ -177,7 +177,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *   F_utf (with error bit) is returned on failure to read/process a UTF-8 character.
  *
- *   Errors from (with error bit): fl_fss_increment_buffer().
+ *   Errors from (with error bit): f_fss_increment_buffer().
  */
 #ifndef _di_fl_fss_extended_list_content_write_
   extern f_return_status fl_fss_extended_list_content_write(const f_string_static content, f_string_range *location, f_string_dynamic *buffer);
diff --git a/level_1/fl_fss/c/private-fss.c b/level_1/fl_fss/c/private-fss.c
new file mode 100644 (file)
index 0000000..51f1863
--- /dev/null
@@ -0,0 +1,136 @@
+#include <level_1/fss.h>
+#include "private-fss.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(_di_fl_fss_identify_) || !defined(_di_fl_fss_identify_file_)
+  f_return_status private_fl_fss_identify(const f_string_static buffer, f_fss_header *header) {
+    register f_string_length i = 0;
+
+    if (buffer.used < 10) {
+      // "# fss-0000" is always at least 10 characters.
+      return FL_fss_header_not;
+    }
+
+    // If this correctly follows the FSS specification, then this should be all that needs to be done (as well as atoh for ascii to hex).
+    // All characters used in the identifier are only in the ascii equivalents of the characters, any similarly looking character or number representing in UTF-8 is considered invalid.
+    if (buffer.string[i] == f_fss_type_header_open) {
+      i++;
+
+      if (buffer.string[i] == f_fss_type_header_part1) {
+        i++;
+
+        if (buffer.string[i] == f_fss_type_header_part2) {
+          i++;
+
+          if (buffer.string[i] == f_fss_type_header_part3) {
+            i++;
+
+            if (buffer.string[i] == f_fss_type_header_part4) {
+              i++;
+
+              if (buffer.string[i] == f_fss_type_header_part5) {
+                i++;
+
+                if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                  i++;
+
+                  if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                    i++;
+
+                    if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                      i++;
+
+                      if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                        i++;
+
+                        f_string_range range = f_string_range_initialize;
+
+                        range.start = i - 4;
+                        range.stop = i;
+
+                        // 1: A possibly valid header type was found, now convert it into its proper format and save the header type.
+                        const f_status status = f_conversion_string_to_hexidecimal_unsigned(buffer.string, &header->type, range);
+                        if (F_status_is_error(status)) return status;
+
+                        if (status == F_none) {
+                          // 2: At this point, we can still know the proper format for the file and still have a invalid header, handle accordingly.
+                          if (buffer.string[i] == f_fss_type_header_close) {
+                            header->length = i + 1;
+
+                            return F_none;
+                          }
+                          else {
+                            // if "# fss-0000" is there, regardless of whats next, we can guess this to be of fss-0000, even if its fss-00001 (this is a guess afterall).
+                            header->length = i + 1;
+
+                            return F_status_is_warning(FL_fss_accepted_invalid);
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      // people can miss spaces, so lets accept in an attempt to interpret the file anyway, but return values at this point are to be flagged as invalid.
+      else if (buffer.string[i] == f_fss_type_header_part2) {
+        i++;
+
+        if (buffer.string[i] == f_fss_type_header_part3) {
+          i++;
+
+          if (buffer.string[i] == f_fss_type_header_part4) {
+            i++;
+
+            if (buffer.string[i] == f_fss_type_header_part5) {
+              i++;
+
+              if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                i++;
+
+                if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                  i++;
+
+                  if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                    i++;
+
+                    if (f_conversion_character_is_hexidecimal(buffer.string[i]) == F_true) {
+                      i++;
+
+                      f_string_range range = f_string_range_initialize;
+
+                      range.start = i - 4;
+                      range.stop = i;
+
+                      const f_status status = f_conversion_string_to_hexidecimal_unsigned(buffer.string, &header->type, range);
+                      if (F_status_is_error(status)) return status;
+
+                      header->length = i + 1;
+
+                      return F_status_is_warning(FL_fss_accepted_invalid);
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    // @todo At some point add checksum and compressions checks here, but the above statements will have to be adjusted accordingly.
+    // 3: eventually this will be processing the checksum and 4: will be processing the compression.
+
+    return FL_fss_header_not;
+  }
+#endif // !defined(_di_fl_fss_identify_) || !defined(_di_fl_fss_identify_file_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_1/fl_fss/c/private-fss.h b/level_1/fl_fss/c/private-fss.h
new file mode 100644 (file)
index 0000000..f81be10
--- /dev/null
@@ -0,0 +1,47 @@
+/**
+ * FLL - Level 1
+ *
+ * Project: FSS
+ * API Version: 0.5
+ * Licenses: lgplv2.1
+ *
+ * These are provided for internal reduction in redundant code.
+ * These should not be exposed/used outside of this project.
+ */
+#ifndef _PRIVATE_FL_fss_h
+#define _PRIVATE_FL_fss_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Private implementation of fl_fss_identify().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param header
+ *   The header data to populate with results of this function.
+ *
+ * @return
+ *   F_none on success
+ *   FL_fss_header_not if no header is found.
+ *   FL_fss_accepted_invalid (with warning bit) if header is technically invalid but can be identified.
+ *   FL_fss_header_not (with error bit) if the an error occurred prior to identifying a valid header.
+ *
+ *   Errors from (with error bit): f_conversion_string_to_hexidecimal_unsigned().
+ *
+ * @see fl_fss_identify()
+ * @see fl_fss_identify_file()
+ */
+#if !defined(_di_fl_fss_identify_) || !defined(_di_fl_fss_identify_file_)
+  extern f_return_status private_fl_fss_identify(const f_string_static buffer, f_fss_header *header) f_gcc_attribute_visibility_internal;
+#endif // !defined(_di_fl_fss_identify_) || !defined(_di_fl_fss_identify_file_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _PRIVATE_FL_fss_h
index 65666d6de4c3f42602a9f6cb55a9a688090cb977..30ef68e00bf18b99bfd03655889c95fbaa5c4e43 100644 (file)
@@ -2,7 +2,7 @@ f_type
 f_status
 f_memory
 f_string
+f_utf
 f_conversion
 f_file
 f_fss
-f_utf
index c1d01b10abd37afdbe760ca81891e0681de38b61..8e3ab2155db38f0aaef8ad9c3cd1816438166f2c 100644 (file)
@@ -19,8 +19,8 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lf_file -lf_conversion -lf_utf -lf_memory
-build_sources_library fss.c fss_basic.c fss_basic_list.c fss_extended.c fss_extended_list.c
+build_libraries-individual -lf_fss -lf_file -lf_conversion -lf_utf -lf_memory
+build_sources_library fss.c private-fss.c fss_basic.c fss_basic_list.c fss_extended.c fss_extended_list.c
 build_sources_program
 build_sources_headers fss.h fss_basic.h fss_basic_list.h fss_extended.h fss_extended_list.h fss_macro.h fss_status.h
 build_sources_script
index 7a215eb9ca010fef3f98376d0fe1416bbc8378c7..a8cfaf5e3136ab1f8d6f3cd925fa903750d142db 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfl_string -lfl_status -lfl_fss -lf_file -lf_conversion -lf_utf -lf_memory
+build_libraries-individual -lfl_string -lfl_status -lfl_fss -lf_file -lf_fss -lf_conversion -lf_utf -lf_memory
 build_sources_library fss.c fss_basic.c fss_basic_list.c fss_extended.c fss_extended_list.c fss_status.c
 build_sources_program
 build_sources_headers fss.h fss_basic.h fss_basic_list.h fss_extended.h fss_extended_list.h fss_status.h
index e616b6d431d431d0710f0c5c20ea31c904e96d01..090e911b26f0bdac55fdb5473dc82eecc9d8c57d 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_execute -lfll_fss -lfl_utf -lfl_string -lfl_status -lfl_fss -lfl_directory -lfl_console -lfl_color -lf_print -lf_path -lf_file -lf_environment -lf_directory -lf_conversion -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_execute -lfll_fss -lfl_utf -lfl_string -lfl_status -lfl_fss -lfl_directory -lfl_console -lfl_color -lf_print -lf_path -lf_file -lf_fss -lf_environment -lf_directory -lf_conversion -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fake.c private-fake.c private-clean.c private-build.c private-make.c private-print.c private-skeleton.c
index 131be72812114077a0d82b790891b7cdc4af64da..4fe73162b5fd4dfc755ec0e491636eab449f839d 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_execute -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_path -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_execute -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_path -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library firewall.c private-firewall.c
index 42fc337a11d90edc010f39cf0fdb27c85075f8b8..18b8913ba0302bf2afdfff2374918740d4016c84 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_list_read.c private-fss_basic_list_read.c
index e8819b3a57f80ca2c0216d4d4b073f744e2ba952..d1a54062914bfdfb2cb1d20d2f4cb31130ed4e8b 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_list_write.c
index f9c2dc08ad5917b7d643a16146c3e5ced6e687f7..19061dfb029249960a408ada21753ad6462c6ac4 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_read.c private-fss_basic_read.c
index 5d51be6b56643717915a6a61f8a502a1ca80798c..b64b0faf1c92ee2c8cb39cdea0e1230a14da2511 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_basic_write.c
index 01a177ae2419ba2c5e33a60e39600b7f2e42620c..a6a1003cd7bddb90de56052c63057d65bf822b8a 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_list_read.c private-fss_extended_list_read.c
index 75e56dd4c01dc316160411d38b1930a670bc0667..013981490ed9ccf01a50385d7a32a9b22a64204a 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_print -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_read.c private-fss_extended_read.c
index a80fd4919aee48750242bf19a85d30eca54bebd8..c30b05f7284938eff3ddc619224a4427dafc4b86 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_extended_write.c
index afe80a6fbaee845f61f925555e948a21c754d500..ee1b6f4135b9e53205b954f87b5d2afdc5b88669 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_status -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_utf -lfl_string -lfl_status -lfl_fss -lfl_console -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_conversion -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_status -lfll_program -lfll_fss -lfll_file -lfll_execute -lf_path -lfl_utf -lfl_string -lfl_status -lfl_fss -lfl_console -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_conversion -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library fss_status_code.c private-fss_status_code.c
index e6a6cdd2284fb2bdcad3fbba5be69ae00fea7a96..aa92144ee4c249519e19c02e41acd4697942e1ed 100644 (file)
@@ -19,7 +19,7 @@ build_compiler gcc
 build_language c
 build_linker ar
 build_libraries -lc
-build_libraries-individual -lfll_program -lfll_fss -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
+build_libraries-individual -lfll_program -lfll_fss -lfll_execute -lf_path -lfl_string -lfl_status -lfl_fss -lfl_console -lf_conversion -lfl_color -lf_print -lf_pipe -lf_fss -lf_file -lf_environment -lf_directory -lf_console -lf_utf -lf_memory
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 build_sources_library init.c private-init.c