]> Kevux Git Server - fll/commitdiff
Progress: Begin working on write, handling various tasks.
authorKevin Day <Kevin@kevux.org>
Mon, 26 Oct 2026 01:43:15 +0000 (20:43 -0500)
committerKevin Day <Kevin@kevux.org>
Mon, 26 Oct 2026 01:43:15 +0000 (20:43 -0500)
Get the stand alone builds working.

Add new function for counting slashes.
This is being done due to the number of calls found relating to this.
This requires moving multiple functions into private functions.

28 files changed:
build/stand_alone/fake.config.h
build/stand_alone/fss_identify.config.h
build/stand_alone/fss_read.config.fss_basic.h
build/stand_alone/fss_read.config.fss_basic_list.h
build/stand_alone/fss_read.config.fss_embedded_list.h
build/stand_alone/fss_read.config.fss_extended.h
build/stand_alone/fss_read.config.fss_extended_list.h
build/stand_alone/fss_read.config.fss_payload.h
build/stand_alone/fss_read.config.h
build/stand_alone/fss_write.config.fss_basic.h
build/stand_alone/fss_write.config.fss_basic_list.h
build/stand_alone/fss_write.config.fss_embedded_list.h
build/stand_alone/fss_write.config.fss_extended.h
build/stand_alone/fss_write.config.fss_extended_list.h
build/stand_alone/fss_write.config.fss_payload.h
build/stand_alone/fss_write.config.h
build/stand_alone/status_code.config.fss.h
level_0/f_fss/c/fss.c
level_0/f_fss/c/fss.h
level_0/f_fss/c/private-fss.c
level_0/f_fss/c/private-fss.h
level_1/fl_fss/c/fss/basic.c
level_1/fl_fss/c/fss/extended.c
level_1/fl_fss/c/fss/payload.c
level_1/fl_fss/c/fss/payload/define.h
level_1/fl_fss/c/fss/private-payload-helper.c
level_1/fl_fss/c/fss/private-payload.c
level_1/fl_fss/c/private-fss.c

index 4664af0..421eeb0 100644 (file)
 //#define _di_f_fss_complete_e_
 //#define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 //#define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 #define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
index d67fb67..8444879 100644 (file)
 #define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 #define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 #define _di_f_fss_is_graph_
+#define _di_f_fss_is_joiner_
 #define _di_f_fss_is_space_
 #define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_fss_quote_single_null_s_
 #define _di_f_fss_quote_type_e_
 #define _di_f_fss_s_
-#define _di_f_fss_seek_to_eol_
+//#define _di_f_fss_seek_to_eol_
 #define _di_f_fss_set_delete_
 #define _di_f_fss_set_destroy_
 #define _di_f_fss_set_quote_delete_
 #define _di_f_fss_simple_packetss_destroy_callback_
 #define _di_f_fss_simple_packetss_t_
 #define _di_f_fss_skip_past_combining_
-#define _di_f_fss_skip_past_delimit_
+//#define _di_f_fss_skip_past_delimit_
 #define _di_f_fss_skip_past_space_
 #define _di_f_fss_skip_past_space_previous_
 //#define _di_f_fss_state_flag_e_
 //#define _di_f_string_ascii_7_s_
 #define _di_f_string_ascii_8_s_
 #define _di_f_string_ascii_9_s_
-#define _di_f_string_ascii_A_s_
+//#define _di_f_string_ascii_A_s_
 //#define _di_f_string_ascii_B_s_
 //#define _di_f_string_ascii_C_s_
 //#define _di_f_string_ascii_D_s_
 //#define _di_f_string_ascii_X_s_
 #define _di_f_string_ascii_Y_s_
 //#define _di_f_string_ascii_Z_s_
-#define _di_f_string_ascii_a_s_
+//#define _di_f_string_ascii_a_s_
 #define _di_f_string_ascii_acknowledge_negative_s_
 #define _di_f_string_ascii_acknowledge_s_
 //#define _di_f_string_ascii_ampersand_s_
index a927704..91a2802 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index bfcb03b..2401f32 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index f961cde..1df6857 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 2059065..9916189 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 9275671..08c2e64 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 7dd5fde..4e7502d 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index da6dea2..bcab695 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index f5a8a96..79d1bbc 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 73b9f51..91367fd 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index db29a22..c124287 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 101cb9b..8e09ac1 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 17e6eea..05c5b9f 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index d3499ca..8fd7bc4 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 8421653..db8d078 100644 (file)
 //#define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 //#define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 //#define _di_f_fss_header_s_
 //#define _di_f_fss_is_combining_
+//#define _di_f_fss_is_combining_joiner_
 //#define _di_f_fss_is_graph_
+//#define _di_f_fss_is_joiner_
 //#define _di_f_fss_is_space_
 //#define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
 #define _di_f_string_dynamic_partial_append_
 #define _di_f_string_dynamic_partial_append_assure_
 #define _di_f_string_dynamic_partial_append_assure_nulless_
-#define _di_f_string_dynamic_partial_append_nulless_
+//#define _di_f_string_dynamic_partial_append_nulless_
 #define _di_f_string_dynamic_partial_mash_
 #define _di_f_string_dynamic_partial_mash_nulless_
 #define _di_f_string_dynamic_partial_mish_
index 1c40e66..383acdb 100644 (file)
 #define _di_f_fss_complete_e_
 #define _di_f_fss_count_lines_
 #define _di_f_fss_count_lines_range_
+#define _di_f_fss_count_slash_
 #define _di_f_fss_default_d_
 #define _di_f_fss_e_
 //#define _di_f_fss_fail_utf_
 //#define _di_f_fss_fail_utf_to_false_
 #define _di_f_fss_header_s_
 #define _di_f_fss_is_combining_
+#define _di_f_fss_is_combining_joiner_
 #define _di_f_fss_is_graph_
+#define _di_f_fss_is_joiner_
 #define _di_f_fss_is_space_
 #define _di_f_fss_is_zero_width_
 #define _di_f_fss_item_delete_
index e7342db..3d31ba2 100644 (file)
@@ -141,6 +141,69 @@ extern "C" {
   }
 #endif // _di_f_fss_count_lines_range_
 
+#ifndef _di_f_fss_count_slash_
+  void f_fss_count_slash(const f_string_static_t buffer, f_range_t * const range, f_number_unsigned_t * const count, f_state_t * const state) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!state) return;
+
+      if (!range || !count) {
+        state->status = F_status_set_error(F_parameter);
+
+        return;
+      }
+    #endif // _di_level_0_parameter_checking_
+
+    if (!buffer.used) {
+      state->status = F_data_not;
+
+      return;
+    }
+
+    while (range->start <= range->stop && range->start < buffer.used) {
+
+      if (state->interrupt) {
+        state->interrupt((void *) state, 0);
+        if (F_status_set_fine(state->status) == F_interrupt) return;
+      }
+
+      if (buffer.string[range->start] == f_fss_placeholder_s.string[0]) {
+        ++range->start;
+
+        continue;
+      }
+
+      if (buffer.string[range->start] == f_fss_slash_s.string[0]) {
+        ++(*count);
+      }
+      else {
+        if (private_f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+          const f_status_t status = state->status;
+
+          private_f_fss_skip_past_combining_joiner(buffer, range, state);
+          if (F_status_is_error(state->status)) return;
+
+          state->status = status;
+        }
+
+        return;
+      }
+
+      state->status = f_utf_buffer_increment(buffer, range, 1);
+      if (F_status_is_error(state->status)) return;
+    } // while
+
+    if (range->start > range->stop) {
+      state->status = F_okay_stop;
+    }
+    else if (range->start >= buffer.used) {
+      state->status = F_okay_eos;
+    }
+    else {
+      state->status = F_okay;
+    }
+  }
+#endif // _di_f_fss_count_lines_
+
 #ifndef _di_f_fss_fail_utf_
   void f_fss_fail_utf(f_state_t * const state) {
     #ifndef _di_level_0_parameter_checking_
@@ -216,37 +279,7 @@ extern "C" {
       return F_false;
     }
 
-    state->status = f_utf_is_combining(
-      buffer.string + range.start,
-      (range.stop - range.start) + 1 > buffer.used - range.start
-        ? buffer.used - range.start
-        : (range.stop - range.start) + 1
-    );
-
-    if (state->status == F_true) {
-      state->status = F_combarudoo;
-
-      return F_true;
-    }
-
-    if (F_status_is_error_not(state->status)) {
-      state->status = f_utf_is_joiner(
-        buffer.string + range.start,
-        (range.stop - range.start) + 1 > buffer.used - range.start
-          ? buffer.used - range.start
-          : (range.stop - range.start) + 1
-      );
-
-      if (state->status == F_true) {
-        state->status = F_bound;
-
-        return F_true;
-      }
-    }
-
-    f_fss_fail_utf_to_false(state);
-
-    return F_false;
+    return private_f_fss_is_combining_joiner(buffer, range, state);
   }
 #endif // _di_f_fss_is_combining_joiner_
 
@@ -463,126 +496,7 @@ extern "C" {
       return;
     }
 
-    // Skip past initial place holders.
-    for (;; ++range->start) {
-
-      if (state->interrupt) {
-        state->interrupt((void *) state, 0);
-        if (F_status_set_fine(state->status) == F_interrupt) return;
-      }
-
-      if (range->start >= buffer.used) {
-        state->status = F_okay_eos;
-
-        return;
-      }
-
-      if (range->start > range->stop) {
-        state->status = F_okay_stop;
-
-        return;
-      }
-
-      if (buffer.string[range->start] != f_fss_placeholder_s.string[0]) break;
-    } // for
-
-    if (macro_f_utf_byte_width_is(buffer.string[range->start])) {
-      if (range->start + macro_f_utf_byte_width(buffer.string[range->start]) > buffer.used) {
-        state->status = F_status_set_error(F_complete_not_utf_eos);
-
-        f_fss_fail_utf(state);
-
-        return;
-      }
-
-      if (range->start + (macro_f_utf_byte_width(buffer.string[range->start]) - 1) > range->stop) {
-        state->status = F_status_set_error(F_complete_not_utf_stop);
-
-        f_fss_fail_utf(state);
-
-        return;
-      }
-    }
-
-    // 0x1 = last is combining, 0x2 = last is joiner.
-    uint8_t flag = 0x0;
-
-    for (;;) {
-
-      if (state->interrupt) {
-        state->interrupt((void *) state, 0);
-        if (F_status_set_fine(state->status) == F_interrupt) return;
-      }
-
-      if (range->start >= buffer.used) {
-        state->status = F_okay_eos;
-
-        return;
-      }
-
-      if (range->start > range->stop) {
-        state->status = F_okay_stop;
-
-        return;
-      }
-
-      if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
-        state->status = F_okay_eol;
-
-        return;
-      }
-
-      if (buffer.string[range->start] == f_fss_placeholder_s.string[0]) {
-        ++range->start;
-
-        continue;
-      }
-
-      state->status = f_utf_is_combining_joiner(
-        buffer.string + range->start,
-        (range->stop - range->start) + 1 > buffer.used - range->start
-          ? buffer.used - range->start
-          : (range->stop - range->start) + 1
-      );
-
-      f_fss_fail_utf_to_false(state);
-
-      if (state->status == F_false) break;
-      if (F_status_is_error(state->status)) return;
-
-      if (macro_f_utf_byte_width_is(buffer.string[range->start])) {
-        if (range->start + macro_f_utf_byte_width(buffer.string[range->start]) > buffer.used) {
-          state->status = F_status_set_error(F_complete_not_utf_eos);
-
-          f_fss_fail_utf(state);
-
-          return;
-        }
-
-        if (range->start + (macro_f_utf_byte_width(buffer.string[range->start]) - 1) > range->stop) {
-          state->status = F_status_set_error(F_complete_not_utf_stop);
-
-          f_fss_fail_utf(state);
-
-          return;
-        }
-      }
-
-      range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-
-      if (state->status == F_bound) {
-        flag = 0x1;
-      }
-      else if (state->status == F_combarudoo) {
-        flag = 0x2;
-      }
-    } // for
-
-    state->status = flag & 0x1
-      ? F_bound
-      : flag & 0x2
-        ? F_combarudoo
-        : F_okay;
+    private_f_fss_skip_past_combining_joiner(buffer, range, state);
   }
 #endif // _di_f_fss_skip_past_combining_joiner_
 
index 3fb6010..f167c2e 100644 (file)
@@ -50,6 +50,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -79,6 +81,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -112,6 +116,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -145,6 +151,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -158,6 +166,53 @@ extern "C" {
   extern void f_fss_count_lines_range(const f_string_static_t buffer, const f_range_t range, f_number_unsigned_t * const line, f_state_t * const state);
 #endif // _di_f_fss_count_lines_range_
 
+/**
+ * Count the number of slashes from the given range in the buffer.
+ *
+ * Use this to helpm determine how to apply slash delimits.
+ *
+ * This does not initialize count, instead it only performs addition to line.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The range within the buffer to process.
+ *   The range.start is incremented during the process.
+ *
+ *   When F_data_not is returned, this value is not altered.
+ *
+ *   Must not be NULL.
+ * @param count
+ *   The total slashes found.
+ *   This value is not reset and only additions are performed.
+ *
+ *   When F_data_not is returned, this value is not altered.
+ *
+ *   Must not be NULL.
+ * @param state
+ *   A state for providing flags and handling interrupts during long running operations.
+ *
+ *   This calls state.interrupt(), if defined.
+ *
+ *   Must not be NULL.
+ *
+ *   This alters state.status:
+ *     F_okay on success.
+ *     F_okay_eos on success but range.start exceeded buffer.used.
+ *     F_okay_stop on success after reaching the stopping point.
+ *     F_bound character in the buffer is a joiner character (future versions will provide a more accurate status, like F_join).
+ *     F_combarudoo character in the buffer is a combining character (future versions will provide a more accurate status, like F_combine).
+ *     F_data_not on success but the range.start is greater than buffer.used or buffer.used is 0 (line is set to 0).
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from f_utf_buffer_increment().
+ */
+#ifndef _di_f_fss_count_slash_
+  extern void f_fss_count_slash(const f_string_static_t buffer, f_range_t * const range, f_number_unsigned_t * const count, f_state_t * const state);
+#endif // _di_f_fss_count_slash_
+
 /**
  * Using the state, check that the status should return an error or not on invalid UTF-8.
  *
@@ -466,6 +521,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -500,6 +557,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -538,6 +597,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   This calls state.interrupt(), if defined.
+ *
  *   Must not be NULL.
  *
  *   This alters state.status:
@@ -650,9 +711,13 @@ extern "C" {
  *     Errors (with error bit) from: f_utf_is_control().
  *     Errors (with error bit) from: f_utf_is_whitespace().
  *     Errors (with error bit) from: f_utf_is_zero_width().
- *
  * @param previous
- *   The previous position before
+ *   The previous position before the last stop point that is a valid character.
+ *
+ *   This is only changed before each loop increment of a valid white space.
+ *   If the first character found is not a white space, then this value is not changed.
+ *
+ *   The range.start will be set to previous when exiting due to a combining or joiner causes a white space to be considered a graph.
  *
  *   Must not be NULL.
  *
index aec1220..359a0d7 100644 (file)
@@ -5,6 +5,178 @@
 extern "C" {
 #endif
 
+#if !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_is_combining_joiner_)
+  f_status_t private_f_fss_is_combining_joiner(const f_string_static_t buffer, const f_range_t range, f_state_t * const state) {
+
+    state->status = f_utf_is_combining(
+      buffer.string + range.start,
+      (range.stop - range.start) + 1 > buffer.used - range.start
+        ? buffer.used - range.start
+        : (range.stop - range.start) + 1
+    );
+
+    if (state->status == F_true) {
+      state->status = F_combarudoo;
+
+      return F_true;
+    }
+
+    if (F_status_is_error_not(state->status)) {
+      state->status = f_utf_is_joiner(
+        buffer.string + range.start,
+        (range.stop - range.start) + 1 > buffer.used - range.start
+          ? buffer.used - range.start
+          : (range.stop - range.start) + 1
+      );
+
+      if (state->status == F_true) {
+        state->status = F_bound;
+
+        return F_true;
+      }
+    }
+
+    if (F_status_is_error_not(state->status)) {
+      state->status = F_okay;
+    }
+
+    f_fss_fail_utf_to_false(state);
+
+    return F_false;
+  }
+#endif // !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_is_combining_joiner_)
+
+#if !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_skip_past_combining_joiner_)
+  void private_f_fss_skip_past_combining_joiner(const f_string_static_t buffer, f_range_t * const range, f_state_t * const state) {
+
+    // Skip past initial place holders.
+    for (;; ++range->start) {
+
+      if (state->interrupt) {
+        state->interrupt((void *) state, 0);
+        if (F_status_set_fine(state->status) == F_interrupt) return;
+      }
+
+      if (range->start >= buffer.used) {
+        state->status = F_okay_eos;
+
+        return;
+      }
+
+      if (range->start > range->stop) {
+        state->status = F_okay_stop;
+
+        return;
+      }
+
+      if (buffer.string[range->start] != f_fss_placeholder_s.string[0]) break;
+    } // for
+
+    if (macro_f_utf_byte_width_is(buffer.string[range->start])) {
+      if (range->start + macro_f_utf_byte_width(buffer.string[range->start]) > buffer.used) {
+        state->status = F_status_set_error(F_complete_not_utf_eos);
+
+        f_fss_fail_utf(state);
+
+        return;
+      }
+
+      if (range->start + (macro_f_utf_byte_width(buffer.string[range->start]) - 1) > range->stop) {
+        state->status = F_status_set_error(F_complete_not_utf_stop);
+
+        f_fss_fail_utf(state);
+
+        return;
+      }
+    }
+
+    #define ___f_flag_last_combining___ 0x1
+    #define ___f_flag_last_joiner___    0x2
+
+    uint8_t flag_f = 0x0;
+
+    for (;;) {
+
+      if (state->interrupt) {
+        state->interrupt((void *) state, 0);
+        if (F_status_set_fine(state->status) == F_interrupt) return;
+      }
+
+      if (range->start >= buffer.used) {
+        state->status = F_okay_eos;
+
+        return;
+      }
+
+      if (range->start > range->stop) {
+        state->status = F_okay_stop;
+
+        return;
+      }
+
+      if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
+        state->status = F_okay_eol;
+
+        return;
+      }
+
+      if (buffer.string[range->start] == f_fss_placeholder_s.string[0]) {
+        ++range->start;
+
+        continue;
+      }
+
+      state->status = f_utf_is_combining_joiner(
+        buffer.string + range->start,
+        (range->stop - range->start) + 1 > buffer.used - range->start
+          ? buffer.used - range->start
+          : (range->stop - range->start) + 1
+      );
+
+      f_fss_fail_utf_to_false(state);
+
+      if (state->status == F_false) break;
+      if (F_status_is_error(state->status)) return;
+
+      if (macro_f_utf_byte_width_is(buffer.string[range->start])) {
+        if (range->start + macro_f_utf_byte_width(buffer.string[range->start]) > buffer.used) {
+          state->status = F_status_set_error(F_complete_not_utf_eos);
+
+          f_fss_fail_utf(state);
+
+          return;
+        }
+
+        if (range->start + (macro_f_utf_byte_width(buffer.string[range->start]) - 1) > range->stop) {
+          state->status = F_status_set_error(F_complete_not_utf_stop);
+
+          f_fss_fail_utf(state);
+
+          return;
+        }
+      }
+
+      range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+
+      if (state->status == F_bound) {
+        flag_f = ___f_flag_last_combining___;
+      }
+      else if (state->status == F_combarudoo) {
+        flag_f = ___f_flag_last_joiner___;
+      }
+    } // for
+
+    state->status = flag_f & ___f_flag_last_combining___
+      ? F_bound
+      : flag_f & ___f_flag_last_joiner___
+        ? F_combarudoo
+        : F_okay;
+
+    #undef ___f_flag_last_combining___
+    #undef ___f_flag_last_joiner___
+  }
+#endif // !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_skip_past_combining_joiner_)
+
 #if !defined(_di_f_fss_skip_past_space_) || !defined(_di_f_fss_skip_past_space_previous_)
   void private_f_fss_skip_past_space_previous(const f_string_static_t buffer, f_range_t * const range, f_state_t * const state, f_number_unsigned_t * const previous) {
 
index 8a4a9d5..3d46248 100644 (file)
 extern "C" {
 #endif
 
+/**
+ * Private implementation of f_fss_is_combining_joiner().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The range within the buffer to process.
+ *   The range.start is incremented during the process.
+ *
+ *   When F_data_not is returned, this value is not altered.
+ *
+ *   Must not be NULL.
+ * @param count
+ *   The total slashes found.
+ *   This value is not reset and only additions are performed.
+ *
+ *   When F_data_not is returned, this value is not altered.
+ *
+ *   Must not be NULL.
+ * @param state
+ *   A state for providing flags and handling interrupts during long running operations.
+ *
+ *   This calls state.interrupt(), if defined.
+ *
+ *   Must not be NULL.
+ *
+ *   This alters state.status:
+ *     F_okay on success.
+ *     F_okay_eos on success but range.start exceeded buffer.used.
+ *     F_okay_stop on success after reaching the stopping point.
+ *     F_bound character in the buffer is a joiner character (future versions will provide a more accurate status, like F_join).
+ *     F_combarudoo character in the buffer is a combining character (future versions will provide a more accurate status, like F_combine).
+ *     F_data_not on success but the range.start is greater than buffer.used or buffer.used is 0 (line is set to 0).
+ *
+ *     F_interrupt (with error bit) if stopping due to an interrupt.
+ *     F_parameter (with error bit) if a parameter is invalid.
+ *
+ *     Errors (with error bit) from f_utf_buffer_increment().
+ *
+ * @see f_utf_buffer_increment()
+ *
+ * @see f_fss_count_slash()
+ * @see f_fss_is_combining_joiner()
+ */
+#if !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_is_combining_joiner_)
+  extern f_status_t private_f_fss_is_combining_joiner(const f_string_static_t buffer, const f_range_t range, f_state_t * const state) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_is_combining_joiner_)
+
+/**
+ * Private implementation of f_fss_skip_past_combining_joiner().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @see f_fss_count_slash()
+ * @see f_fss_skip_past_combining_joiner()
+ */
+#if!defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_skip_past_combining_joiner_)
+  extern void private_f_fss_skip_past_combining_joiner(const f_string_static_t buffer, f_range_t * const range, f_state_t * const state) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_fss_count_slash_) || !defined(_di_f_fss_skip_past_combining_joiner_)
+
 /**
  * Private implementation of f_fss_skip_past_space_previous().
  *
@@ -45,6 +107,15 @@ extern "C" {
  *     Errors (with error bit) from: f_utf_is_control().
  *     Errors (with error bit) from: f_utf_is_whitespace().
  *     Errors (with error bit) from: f_utf_is_zero_width().
+ * @param previous
+ *   The previous position before the last stop point that is a valid character.
+ *
+ *   This is only changed before each loop increment of a valid white space.
+ *   If the first character found is not a white space, then this value is not changed.
+ *
+ *   The range.start will be set to previous when exiting due to a combining or joiner causes a white space to be considered a graph.
+ *
+ *   Must not be NULL.
  *
  * @see f_utf_is_combining_joiner()
  * @see f_utf_is_control()
index 35bba7b..8de9dda 100644 (file)
@@ -202,9 +202,11 @@ extern "C" {
       }
     #endif // _di_level_1_parameter_checking_
 
+    #define ___fl_flag_as_object___ 0x1
+
     const f_number_unsigned_t destination_used = destination->used;
 
-    private_fl_fss_basic_write(F_true, object, quote ? quote : f_fss_quote_double_s.string[0], range, destination, state, 0);
+    private_fl_fss_basic_write(___fl_flag_as_object___, object, quote ? quote : f_fss_quote_double_s.string[0], range, destination, state, 0);
 
     if (F_status_is_error(state->status)) {
       destination->used = destination_used;
@@ -263,6 +265,8 @@ extern "C" {
     if (F_status_is_error(state->status)) {
       destination->used = destination_used;
     }
+
+    #undef ___fl_flag_as_object___
   }
 #endif //_di_fl_fss_basic_object_write_
 
index aa21a4b..5be7c91 100644 (file)
@@ -156,10 +156,11 @@ extern "C" {
       }
     #endif // _di_level_1_parameter_checking_
 
+    #define ___fl_flag_as_content___ 0x0
+
     const f_number_unsigned_t destination_used = destination->used;
 
-    // This operates exactly like an object, syntax-wise.
-    private_fl_fss_basic_write(F_false, content, quote ? quote : f_fss_quote_double_s.string[0], range, destination, state, 0);
+    private_fl_fss_basic_write(___fl_flag_as_content___, content, quote ? quote : f_fss_quote_double_s.string[0], range, destination, state, 0);
 
     if (F_status_is_error(state->status)) {
       destination->used = destination_used;
@@ -211,6 +212,8 @@ extern "C" {
     if (complete == f_fss_complete_full_e || complete == f_fss_complete_full_trim_e || complete == f_fss_complete_end_e) {
       destination->string[destination->used++] = f_fss_extended_close_s.string[0];
     }
+
+    #undef ___fl_flag_as_content___
   }
 #endif // _di_fl_fss_extended_content_write_
 
@@ -255,9 +258,11 @@ void fl_fss_extended_object_write(const f_string_static_t object, const uint8_t
       }
     #endif // _di_level_1_parameter_checking_
 
+    #define ___fl_flag_as_object___ 0x1
+
     const f_number_unsigned_t destination_used = destination->used;
 
-    private_fl_fss_basic_write(F_true, object, quote ? quote : f_fss_quote_double_s.string[0], range, destination, state, 0);
+    private_fl_fss_basic_write(___fl_flag_as_object___, object, quote ? quote : f_fss_quote_double_s.string[0], range, destination, state, 0);
 
     if (F_status_is_error(state->status)) {
       destination->used = destination_used;
@@ -312,6 +317,8 @@ void fl_fss_extended_object_write(const f_string_static_t object, const uint8_t
         }
       }
     }
+
+    #undef ___fl_flag_as_object___
   }
 #endif // _di_fl_fss_extended_object_write_
 
index 25205c3..eaaefe8 100644 (file)
@@ -23,6 +23,8 @@ extern "C" {
       }
     #endif // _di_level_1_parameter_checking_
 
+    #define ___fl_flag_as_object___ 0x1
+
     fl_fss_payload_header_state_t * const data = (fl_fss_payload_header_state_t *) state->data;
     fl_fss_payload_header_internal_t internal = macro_fl_fss_payload_header_internal_t_initialize_2(destinations, destinations->used);
 
@@ -84,7 +86,7 @@ extern "C" {
         internal.range.start = headers.array[internal.i].key.used ? 0 : 1;
         internal.range.stop = headers.array[internal.i].key.used ? headers.array[internal.i].key.used - 1 : 0;
 
-        private_fl_fss_basic_write(F_true, headers.array[internal.i].key, internal.quote, &internal.range, &destinations->array[destinations->used].key, state, (void * const) &internal);
+        private_fl_fss_basic_write(___fl_flag_as_object___, headers.array[internal.i].key, internal.quote, &internal.range, &destinations->array[destinations->used].key, state, (void * const) &internal);
 
         if (F_status_is_error_not(state->status)) {
           state->status = f_string_dynamic_strip_null(&destinations->array[destinations->used].key);
@@ -348,6 +350,8 @@ extern "C" {
     if (F_status_is_error(state->status)) return;
 
     state->status = F_okay;
+
+    #undef ___fl_flag_as_object___
   }
 #endif // _di_fl_fss_payload_header_map_
 
index 5f4ee96..7abdfdb 100644 (file)
@@ -127,7 +127,7 @@ extern "C" {
         internal.range.start = 0; \
         internal.range.stop = dynamic.used - 1; \
         \
-        private_fl_fss_basic_write(F_false, dynamic, internal.quote, &internal.range, data->cache, state, (void * const) &internal); \
+        private_fl_fss_basic_write(0x0, dynamic, internal.quote, &internal.range, data->cache, state, (void * const) &internal); \
       } \
       else { \
         state->status = f_string_dynamic_append(internal.quote_null, data->cache); \
index bc8f262..328cf09 100644 (file)
@@ -9,11 +9,13 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_helper_header_map_destination_write_buffer(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_static_t * const buffer, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___  0x0
+
     if (buffer->used) {
       internal->range.start = 0;
       internal->range.stop = buffer->used - 1;
 
-      private_fl_fss_basic_write(F_false, *buffer, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+      private_fl_fss_basic_write(___fl_flag_as_content___, *buffer, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
 
       if (F_status_is_error_not(state->status)) {
         state->status = f_string_dynamic_strip_null(&destinations->array[destinations->used].value);
@@ -24,6 +26,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -31,11 +35,13 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_helper_header_map_destination_write_buffer_or_empty(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_static_t * const buffer, f_string_maps_t * const destinations, const uint64_t append_on_empty) {
 
+    #define ___fl_flag_as_content___  0x0
+
     if (buffer->used) {
       internal->range.start = 0;
       internal->range.stop = buffer->used - 1;
 
-      private_fl_fss_basic_write(F_false, *buffer, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+      private_fl_fss_basic_write(___fl_flag_as_content___, *buffer, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
 
       if (F_status_is_error_not(state->status)) {
         state->status = f_string_dynamic_strip_null(&destinations->array[destinations->used].value);
@@ -50,6 +56,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
index 92ecd8e..4eadd9e 100644 (file)
@@ -10,6 +10,8 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_dynamics(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_statics_t * const buffers, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+
     if (buffers->used) {
       data->cache->used = 0;
       internal->k = 0;
@@ -43,7 +45,7 @@ extern "C" {
             internal->range.start = 0;
             internal->range.stop = buffers->array[internal->j].used - 1;
 
-            private_fl_fss_basic_write(F_false, buffers->array[internal->j], internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+            private_fl_fss_basic_write(___fl_flag_as_content___, buffers->array[internal->j], internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
 
             if (F_status_is_error_not(state->status)) {
               state->status = f_string_dynamic_append_assure(f_fss_extended_next_s, &destinations->array[destinations->used].value);
@@ -67,7 +69,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = data->cache->used - 1;
 
-          private_fl_fss_basic_write(F_false, *data->cache, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
           if (F_status_is_error(state->status)) return F_true;
         }
         else {
@@ -96,6 +98,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -103,6 +107,8 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_map(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_map_t * const map, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+
     state->status = f_memory_array_increase_by(map->key.used + map->value.used + f_string_space_s.used + internal->quote_null.used * 2, sizeof(f_char_t), (void **) &destinations->array[destinations->used].value.string, &destinations->array[destinations->used].value.used, &destinations->array[destinations->used].value.size);
     if (F_status_is_error(state->status)) return F_true;
 
@@ -151,7 +157,7 @@ extern "C" {
         internal->range.start = 0;
         internal->range.stop = data->cache->used - 1;
 
-        private_fl_fss_basic_write(F_false, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+        private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
         if (F_status_is_error(state->status)) return F_true;
       }
     }
@@ -161,7 +167,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = map->key.used - 1;
 
-          private_fl_fss_basic_write(F_false, map->key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, map->key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
         }
         else {
           state->status = f_string_dynamic_append(internal->quote_null, &destinations->array[destinations->used].value);
@@ -179,7 +185,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = map->value.used - 1;
 
-          private_fl_fss_basic_write(F_false, map->value, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, map->value, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
         }
         else {
           state->status = f_string_dynamic_append(internal->quote_null, &destinations->array[destinations->used].value);
@@ -204,6 +210,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -211,6 +219,8 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_map_multi(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_map_multi_t * const map, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+
     if (map->key.used || (data->flag & f_fss_payload_header_map_flag_null_map_multi_name_e)) {
       internal->k = map->key.used + internal->quote_null.used;
     }
@@ -297,7 +307,7 @@ extern "C" {
         internal->range.start = 0;
         internal->range.stop = data->cache->used - 1;
 
-        private_fl_fss_basic_write(F_false, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+        private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
         if (F_status_is_error(state->status)) return F_true;
       }
     }
@@ -307,7 +317,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = map->key.used - 1;
 
-          private_fl_fss_basic_write(F_false, map->key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, map->key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
         }
         else {
           state->status = f_string_dynamic_append(internal->quote_null, &destinations->array[destinations->used].value);
@@ -329,7 +339,7 @@ extern "C" {
                 internal->range.start = 0;
                 internal->range.stop = map->value.array[internal->m].used - 1;
 
-                private_fl_fss_basic_write(F_false, map->value.array[internal->m], 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+                private_fl_fss_basic_write(___fl_flag_as_content___, map->value.array[internal->m], 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
               }
               else {
                 state->status = f_string_dynamic_append(internal->quote_null, &destinations->array[destinations->used].value);
@@ -366,6 +376,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -373,6 +385,9 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_multis(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_map_multis_t * const maps, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+    #define ___fl_flag_as_object___  0x1
+
     if (maps->used) {
       internal->k = 0;
       internal->l = 0;
@@ -481,7 +496,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = data->cache->used - 1;
 
-          private_fl_fss_basic_write(F_false, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
           if (F_status_is_error(state->status)) return F_true;
         }
       }
@@ -555,7 +570,7 @@ extern "C" {
             internal->range.start = 0;
             internal->range.stop = data->cache->used - 1;
 
-            private_fl_fss_basic_write(F_false, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+            private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
 
             if (F_status_is_error_not(state->status)) {
               state->status = f_string_dynamic_append_assure(f_fss_extended_next_s, &destinations->array[destinations->used].value);
@@ -587,7 +602,7 @@ extern "C" {
               internal->range.start = 0;
               internal->range.stop = maps->array[internal->l].key.used - 1;
 
-              private_fl_fss_basic_write(F_false, maps->array[internal->l].key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+              private_fl_fss_basic_write(___fl_flag_as_content___, maps->array[internal->l].key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
               if (F_status_is_error(state->status)) return F_true;
             }
             else if (data->flag & f_fss_payload_header_map_flag_null_map_multi_name_e) {
@@ -607,7 +622,7 @@ extern "C" {
                   internal->range.start = 0;
                   internal->range.stop = maps->array[internal->l].value.array[internal->m].used - 1;
 
-                  private_fl_fss_basic_write(F_true, maps->array[internal->l].value.array[internal->m], 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+                  private_fl_fss_basic_write(___fl_flag_as_object___, maps->array[internal->l].value.array[internal->m], 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
                   if (F_status_is_error(state->status)) return F_true;
                 }
                 else if (data->flag & f_fss_payload_header_map_flag_null_map_multi_values_e) {
@@ -684,6 +699,9 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+    #undef ___fl_flag_as_object___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -691,6 +709,9 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_) || !defined(_di_fl_fss_payload_header_maps_)
   uint8_t private_fl_payload_header_map_maps(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_maps_t * const maps, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+    #define ___fl_flag_as_object___  0x1
+
     if (maps->used) {
       internal->k = 0;
 
@@ -774,7 +795,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = data->cache->used - 1;
 
-          private_fl_fss_basic_write(F_false, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
           if (F_status_is_error(state->status)) return F_true;
         }
       }
@@ -832,7 +853,7 @@ extern "C" {
             internal->range.start = 0;
             internal->range.stop = data->cache->used - 1;
 
-            private_fl_fss_basic_write(F_false, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+            private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
 
 
             if (F_status_is_error_not(state->status)) {
@@ -862,7 +883,7 @@ extern "C" {
               internal->range.start = 0;
               internal->range.stop = maps->array[internal->l].key.used - 1;
 
-              private_fl_fss_basic_write(F_false, maps->array[internal->l].key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+              private_fl_fss_basic_write(___fl_flag_as_content___, maps->array[internal->l].key, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
               if (F_status_is_error(state->status)) return F_true;
             }
             else if (data->flag & f_fss_payload_header_map_flag_null_map_name_e) {
@@ -880,7 +901,7 @@ extern "C" {
             internal->range.start = 0;
             internal->range.stop = maps->array[internal->l].value.used - 1;
 
-            private_fl_fss_basic_write(F_true, maps->array[internal->l].value, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+            private_fl_fss_basic_write(___fl_flag_as_object___, maps->array[internal->l].value, 0, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
             if (F_status_is_error(state->status)) return F_true;
           }
           else if (data->flag & f_fss_payload_header_map_flag_null_map_value_e) {
@@ -945,6 +966,9 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+    #undef ___fl_flag_as_object___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_) || !defined(_di_fl_fss_payload_header_maps_)
@@ -1369,6 +1393,8 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_strings(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, f_string_t * const buffers, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+
     if (buffers && buffers[0]) {
       f_string_static_t string_static = f_string_static_t_initialize;
 
@@ -1425,7 +1451,7 @@ extern "C" {
             internal->range.start = 0;
             internal->range.stop = string_static.used - 1;
 
-            private_fl_fss_basic_write(F_false, string_static, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+            private_fl_fss_basic_write(___fl_flag_as_content___, string_static, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
             if (F_status_is_error(state->status)) return F_true;
 
             if (internal->j + 1 < internal->l) {
@@ -1449,7 +1475,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = data->cache->used - 1;
 
-          private_fl_fss_basic_write(F_false, *data->cache, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, *data->cache, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
           if (F_status_is_error(state->status)) return F_true;
         }
         else {
@@ -1470,6 +1496,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -1477,6 +1505,8 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_triple(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, const f_string_triple_t triple, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+
     f_string_dynamic_t * const destination = (data->flag & f_fss_payload_header_map_flag_join_triple_e) ? data->cache : &destinations->array[destinations->used].value;
     const f_string_static_t separator = (data->flag & f_fss_payload_header_map_flag_join_triple_e) ? f_string_space_s : f_fss_extended_next_s;
 
@@ -1521,7 +1551,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = triple.a.used - 1;
 
-          private_fl_fss_basic_write(F_false, triple.a, internal->quote, &internal->range, destination, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, triple.a, internal->quote, &internal->range, destination, state, (void * const) internal);
         }
 
         if (F_status_is_error(state->status)) return F_true;
@@ -1546,7 +1576,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = triple.b.used - 1;
 
-          private_fl_fss_basic_write(F_false, triple.b, internal->quote, &internal->range, destination, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, triple.b, internal->quote, &internal->range, destination, state, (void * const) internal);
         }
 
         if (F_status_is_error(state->status)) return F_true;
@@ -1571,7 +1601,7 @@ extern "C" {
           internal->range.start = 0;
           internal->range.stop = triple.c.used - 1;
 
-          private_fl_fss_basic_write(F_false, triple.c, internal->quote, &internal->range, destination, state, (void * const) internal);
+          private_fl_fss_basic_write(___fl_flag_as_content___, triple.c, internal->quote, &internal->range, destination, state, (void * const) internal);
         }
 
         if (F_status_is_error(state->status)) return F_true;
@@ -1592,6 +1622,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
@@ -1599,6 +1631,8 @@ extern "C" {
 #if !defined(_di_fl_fss_payload_header_map_)
   uint8_t private_fl_payload_header_map_triples(fl_fss_payload_header_state_t * const data, f_state_t * const state, fl_fss_payload_header_internal_t * const internal, const f_string_triples_t triples, f_string_maps_t * const destinations) {
 
+    #define ___fl_flag_as_content___ 0x0
+
     if (triples.used) {
       internal->k = 0;
 
@@ -1682,7 +1716,7 @@ extern "C" {
               internal->range.start = 0;
               internal->range.stop = triples.array[internal->l].a.used - 1;
 
-              private_fl_fss_basic_write(F_false, triples.array[internal->l].a, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+              private_fl_fss_basic_write(___fl_flag_as_content___, triples.array[internal->l].a, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
               if (F_status_is_error(state->status)) return F_true;
             }
             else {
@@ -1699,7 +1733,7 @@ extern "C" {
               internal->range.start = 0;
               internal->range.stop = triples.array[internal->l].b.used - 1;
 
-              private_fl_fss_basic_write(F_false, triples.array[internal->l].b, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+              private_fl_fss_basic_write(___fl_flag_as_content___, triples.array[internal->l].b, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
               if (F_status_is_error(state->status)) return F_true;
             }
             else if (data->flag & f_fss_payload_header_map_flag_null_triple_e) {
@@ -1716,7 +1750,7 @@ extern "C" {
               internal->range.start = 0;
               internal->range.stop = triples.array[internal->l].c.used - 1;
 
-              private_fl_fss_basic_write(F_false, triples.array[internal->l].c, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
+              private_fl_fss_basic_write(___fl_flag_as_content___, triples.array[internal->l].c, internal->quote, &internal->range, &destinations->array[destinations->used].value, state, (void * const) internal);
               if (F_status_is_error(state->status)) return F_true;
             }
             else if (data->flag & f_fss_payload_header_map_flag_null_triple_e) {
@@ -1755,6 +1789,8 @@ extern "C" {
 
     state->status = F_okay;
 
+    #undef ___fl_flag_as_content___
+
     return F_false;
   }
 #endif // !defined(_di_fl_fss_payload_header_map_)
index 072e3ad..cc89b1e 100644 (file)
@@ -227,12 +227,9 @@ extern "C" {
         }
 
         if (buffer.string[range->start] == f_fss_slash_s.string[0]) {
-          slash_first = range->start;
+          slash_first = range->start++;
           slash_count = 1;
 
-          state->status = f_utf_buffer_increment(buffer, range, 1);
-          if (F_status_is_error(state->status)) return;
-
           f_fss_skip_past_delimit(buffer, range, state);
           if (F_status_is_error(state->status)) return;
 
@@ -817,8 +814,6 @@ extern "C" {
 #if !defined(_di_fl_fss_basic_content_read_) || !defined(_di_fl_fss_basic_object_write_) || !defined(_di_fl_fss_extended_object_write_) || !defined(_di_fl_fss_extended_content_read_) || !defined(_di_fl_fss_extended_content_write_) || !defined(_di_fl_fss_payload_header_map_)
   void private_fl_fss_basic_write(const uint8_t flag, const f_string_static_t object, const uint8_t quote, f_range_t * const range, f_string_dynamic_t * const destination, f_state_t * const state, void * const internal) {
 
-    // TODO: update this (and all FSS write functions) to handle combining and joiners.
-
     f_fss_skip_past_space(object, range, state);
     if (F_status_is_error(state->status) || state->status == F_data_not) return;
 
@@ -844,16 +839,22 @@ extern "C" {
     state->status = f_memory_array_increase_by(state->step_small + 5, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size);
     if (F_status_is_error(state->status)) return;
 
+    #define ___fl_flag_as_object___ 0x1
+
+    #define ___fl_flag_do_handle___ 0x1
+
     const f_number_unsigned_t input_start = range->start;
     const f_number_unsigned_t used_start = destination->used;
 
     uint8_t quoted_is = F_false;
     uint8_t commented = F_false;
     uint8_t width = 0;
+    uint8_t flag_fl = 0x0;
 
     f_number_unsigned_t item_first = 0;
     f_number_unsigned_t item_total = 0;
     f_number_unsigned_t i = 0;
+    f_range_t partial = f_range_t_initialize;
 
     const f_char_t quote_char = quote ? quote : f_string_ascii_quote_double_s.string[0];
 
@@ -861,12 +862,44 @@ extern "C" {
     destination->string[destination->used++] = f_fss_placeholder_s.string[0];
     destination->string[destination->used++] = f_fss_placeholder_s.string[0];
 
-    // If there is an initial quote, then this must be escaped.
-    if (object.string[input_start] == quote_char) {
-      quoted_is = F_true;
-    }
-    else if ((flag & 0x1) && object.string[input_start] == f_fss_comment_s.string[0]) {
-      commented = F_true;
+    // If there is an initial quote or comment, then this must be escaped, but only if it has no combining or joiners.
+    if (object.string[input_start] == quote_char || (flag & ___fl_flag_as_object___) && object.string[input_start] == f_fss_comment_s.string[0]) {
+      partial.start = range->start++;
+
+      f_fss_skip_past_delimit(object, range, state);
+
+      if (F_status_is_error_not(state->status)) {
+        if (f_fss_is_combining_joiner(object, *range, state) == F_true) {
+          f_fss_skip_past_combining_joiner(object, range, state);
+
+          if (F_status_is_error_not(state->status)) {
+            partial.start = input_start;
+            partial.stop = range->start;
+
+            state->status = f_memory_array_increase_by(width, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size);
+          }
+
+          if (F_status_is_error_not(state->status)) {
+            state->status = f_string_dynamic_partial_append_nulless(object, partial, destination);
+          }
+
+          if (F_status_is_error_not(state->status)) {
+            state->status = f_utf_buffer_increment(object, range, 1);
+          }
+        }
+        else if (F_status_is_error_not(state->status)) {
+          range->start = input_start;
+
+          if (object.string[input_start] == quote_char) {
+            quoted_is = F_true;
+          }
+          else {
+            commented = F_true;
+          }
+        }
+      }
+
+      if (F_status_is_error(state->status)) return;
     }
 
     for (; range->start <= range->stop && range->start < object.used; ) {
@@ -876,8 +909,11 @@ extern "C" {
         if (F_status_set_fine(state->status) == F_interrupt) break;
       }
 
+      flag_fl |= ___fl_flag_do_handle___;
+
       if (object.string[range->start] == f_fss_slash_s.string[0]) {
-        item_first = range->start++;
+        // TODO: Verify no combining joiners following.
+        item_first = partial.start = range->start++;
         item_total = 1;
 
         for (; range->start <= range->stop && range->start < object.used; ++range->start) {
@@ -887,7 +923,7 @@ extern "C" {
             if (F_status_set_fine(state->status) == F_interrupt) break;
           }
 
-          if (object.string[range->start] == f_fss_slash_s.string[0]) {
+          if (object.string[range->start] == f_fss_slash_s.string[0]) { // TODO: Verify no combining joiners following. Also, skip past slashes? Or count slashes function?
             ++item_total;
           }
           else if (object.string[range->start] != f_fss_placeholder_s.string[0]) {
@@ -934,6 +970,7 @@ extern "C" {
         }
 
         if (object.string[range->start] == quote_char) {
+          // TODO: Verify no combining joiners following.
           item_first = range->start++;
 
           f_fss_skip_past_delimit(object, range, state);
@@ -994,7 +1031,8 @@ extern "C" {
 
           destination->used += width;
         }
-        else if ((flag & 0x1) && object.string[range->start] == f_fss_comment_s.string[0]) {
+        else if ((flag & ___fl_flag_as_object___) && object.string[range->start] == f_fss_comment_s.string[0]) {
+          // TODO: Verify no combining joiners following.
 
           // Only the first slash needs to be escaped for a comment, and then only if not quote.
           if (item_first == input_start) {
@@ -1042,8 +1080,11 @@ extern "C" {
 
           destination->used += width;
         }
+
+        flag_fl &= ~___fl_flag_do_handle___;
       }
       else if (object.string[range->start] == quote_char) {
+        // TODO: Verify no combining joiners following.
         item_first = range->start++;
 
         f_fss_skip_past_delimit(object, range, state);
@@ -1059,6 +1100,7 @@ extern "C" {
         }
 
         if (object.string[range->start] == quote_char) {
+          // TODO: Verify no combining joiners following.
           state->status = f_memory_array_increase(state->step_large, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size);
           if (F_status_is_error(state->status)) break;
 
@@ -1097,15 +1139,19 @@ extern "C" {
         memcpy(destination->string + destination->used, object.string + range->start, width);
 
         destination->used += width;
+
+        flag_fl &= ~___fl_flag_do_handle___;
       }
       else if (object.string[range->start] == f_fss_eol_s.string[0]) {
         state->status = F_status_set_error(F_okay_eol);
 
         break;
       }
-      else if (object.string[range->start] != f_fss_placeholder_s.string[0]) {
+
+      if (flag_fl & ___fl_flag_do_handle___ && object.string[range->start] != f_fss_placeholder_s.string[0]) {
         if (!quoted_is) {
           if (object.string[range->start] == f_string_ascii_quote_double_s.string[0] || object.string[range->start] == f_string_ascii_quote_single_s.string[0] || object.string[range->start] == f_string_ascii_grave_s.string[0]) {
+            // TODO: Verify no combining joiners following.
             item_first = range->start++;
 
             f_fss_skip_past_delimit(object, range, state);
@@ -1166,6 +1212,7 @@ extern "C" {
 
       // The start quote may or may not need to be delimited in this case.
       if (destination->string[input_start] == quote_char) {
+        // TODO: Verify no combining joiners following.
         for (i = input_start + macro_f_utf_byte_width(object.string[input_start]); i <= range->stop && i < object.used; i += macro_f_utf_byte_width(object.string[i])) {
 
           if (state->interrupt) {
@@ -1187,7 +1234,7 @@ extern "C" {
 
           range_i.start = i;
 
-          if (f_fss_is_space(object, range_i, state) == F_false) {
+          if (f_fss_is_space(object, range_i, state) == F_false) { // TODO: Verify no combining joiners following.
             if (F_status_is_error(state->status)) {
               destination->used = used_start;
 
@@ -1213,6 +1260,10 @@ extern "C" {
     }
 
     state->status = range->start > range->stop ? F_okay_stop : F_okay_eos;
+
+    #undef ___fl_flag_as_object___
+
+    #undef ___fl_flag_do_handle___
   }
 #endif // !defined(_di_fl_fss_basic_content_read_) || !defined(_di_fl_fss_basic_object_write_) || !defined(_di_fl_fss_extended_object_write_) || !defined(_di_fl_fss_extended_content_read_) || !defined(_di_fl_fss_extended_content_write_) || !defined(_di_fl_fss_payload_header_map_)