From 613cf1198f7f4cbdbce33c9439bc55ae14f3ce09 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Mon, 2 Nov 2026 21:14:44 -0600 Subject: [PATCH] Progress: Continue work on the write functions. This is in the middle of changing the logic in `private_fl_fss_basic_write()`. I noticed that I was forgetting to handle the `F_bound` case for a joiner where the character to the right no longer can be processed. I need to verify that I did this for the read functions. I need to add unit tests for catching these cases as well, if I have not done so already. --- level_1/fl_fss/c/fss/basic.h | 2 + level_1/fl_fss/c/fss/basic_list.c | 10 +- level_1/fl_fss/c/fss/embedded_list.c | 2 + level_1/fl_fss/c/fss/extended.h | 8 + level_1/fl_fss/c/fss/extended_list.c | 2 + level_1/fl_fss/c/private-fss-list.c | 7 +- level_1/fl_fss/c/private-fss.c | 236 ++++++++++++++++++--------- level_1/fl_fss/c/private-fss.h | 2 + 8 files changed, 192 insertions(+), 77 deletions(-) diff --git a/level_1/fl_fss/c/fss/basic.h b/level_1/fl_fss/c/fss/basic.h index 304e6b785..20c0919db 100644 --- a/level_1/fl_fss/c/fss/basic.h +++ b/level_1/fl_fss/c/fss/basic.h @@ -218,6 +218,7 @@ extern "C" { * Errors (with error bit) from: f_fss_skip_past_space(). * Errors (with error bit) from: f_fss_slash_count(). * Errors (with error bit) from: f_memory_array_increase_by(). + * Errors (with error bit) from: f_utf_buffer_decrement(). * Errors (with error bit) from: f_utf_buffer_increment(). * * @see f_fss_count_slash() @@ -228,6 +229,7 @@ extern "C" { * @see f_fss_skip_past_delimit() * @see f_fss_skip_past_space() * @see f_memory_array_increase_by() + * @see f_utf_buffer_decrement() * @see f_utf_buffer_increment() */ #ifndef _di_fl_fss_basic_object_read_ diff --git a/level_1/fl_fss/c/fss/basic_list.c b/level_1/fl_fss/c/fss/basic_list.c index 0fcbbcf78..dd3c066d8 100644 --- a/level_1/fl_fss/c/fss/basic_list.c +++ b/level_1/fl_fss/c/fss/basic_list.c @@ -111,7 +111,13 @@ extern "C" { flag_fl &= ~___fl_flag_do_escape___; if (range->start > range->stop || range->start >= buffer.used) break; - if (state->status == F_combarudoo || state->status == F_bound) continue; + + if (state->status == F_combarudoo || state->status == F_bound) { + f_fss_skip_past_combining_joiner(buffer, range, state); + if (F_status_is_error(state->status)) return; + + continue; + } if (buffer.string[range->start] == f_fss_basic_list_open_s.string[0]) { flag_fl &= ~___fl_flag_has_graph_first___; @@ -877,6 +883,8 @@ extern "C" { f_fss_count_slash(object, range, &slash_count, state); if (F_status_is_error(state->status)) break; + // TODO: Handle this returning F_combarudoo and F_bound. + // Only slashes at the end of the object must be delimited to avoid delimiting the object close character. if (range->start > range->stop || range->start >= object.used) { slash_count *= 2; diff --git a/level_1/fl_fss/c/fss/embedded_list.c b/level_1/fl_fss/c/fss/embedded_list.c index 4940d40a2..eef32a450 100644 --- a/level_1/fl_fss/c/fss/embedded_list.c +++ b/level_1/fl_fss/c/fss/embedded_list.c @@ -1140,6 +1140,8 @@ extern "C" { f_fss_count_slash(object, range, &slash_count, state); if (F_status_is_error(state->status)) return; + // TODO: Handle this returning F_combarudoo and F_bound. + // Only slashes at the end of the object must be delimited to avoid delimiting the object close character. if (range->start > range->stop || range->start >= object.used) { slash_count *= 2; diff --git a/level_1/fl_fss/c/fss/extended.h b/level_1/fl_fss/c/fss/extended.h index b53cc2c42..f99d7c1dc 100644 --- a/level_1/fl_fss/c/fss/extended.h +++ b/level_1/fl_fss/c/fss/extended.h @@ -93,7 +93,10 @@ extern "C" { * Errors (with error bit) from: f_fss_is_zero_width(). * Errors (with error bit) from: f_fss_skip_past_delimit(). * Errors (with error bit) from: f_fss_skip_past_space(). + * Errors (with error bit) from: f_utf_buffer_decrement(). * Errors (with error bit) from: f_utf_buffer_increment(). + * Errors (with error bit) from: fl_fss_basic_object_read(). + * Errors (with error bit) from: fl_fss_extended_object_read(). * * @see f_fss_count_slash() * @see f_fss_is_graph() @@ -101,6 +104,7 @@ extern "C" { * @see f_fss_is_zero_width() * @see f_fss_skip_past_delimit() * @see f_fss_skip_past_space() + * @see f_utf_buffer_decrement() * @see f_utf_buffer_increment() * @see fl_fss_basic_object_read() * @see fl_fss_extended_object_read() @@ -244,7 +248,10 @@ extern "C" { * Errors (with error bit) from: f_fss_skip_past_delimit(). * Errors (with error bit) from: f_fss_skip_past_space(). * Errors (with error bit) from: f_memory_array_increase(). + * Errors (with error bit) from: f_utf_buffer_decrement(). * Errors (with error bit) from: f_utf_buffer_increment(). + * Errors (with error bit) from: fl_fss_basic_object_read(). + * Errors (with error bit) from: fl_fss_extended_content_read(). * * @see f_fss_count_slash() * @see f_fss_is_graph() @@ -253,6 +260,7 @@ extern "C" { * @see f_fss_skip_past_delimit() * @see f_fss_skip_past_space() * @see f_memory_array_increase() + * @see f_utf_buffer_decrement() * @see f_utf_buffer_increment() * @see fl_fss_basic_object_read() * @see fl_fss_extended_content_read() diff --git a/level_1/fl_fss/c/fss/extended_list.c b/level_1/fl_fss/c/fss/extended_list.c index 655eb0590..3fcf98e80 100644 --- a/level_1/fl_fss/c/fss/extended_list.c +++ b/level_1/fl_fss/c/fss/extended_list.c @@ -875,6 +875,8 @@ extern "C" { f_fss_count_slash(object, range, &slash_count, state); if (F_status_is_error(state->status)) return; + // TODO: Handle this returning F_combarudoo and F_bound. + // Only slashes at the end of the object must be delimited to avoid delimiting the object close character. if (range->start > range->stop || range->start >= object.used) { slash_count *= 2; diff --git a/level_1/fl_fss/c/private-fss-list.c b/level_1/fl_fss/c/private-fss-list.c index 0946e3792..9097fe701 100644 --- a/level_1/fl_fss/c/private-fss-list.c +++ b/level_1/fl_fss/c/private-fss-list.c @@ -120,7 +120,12 @@ extern "C" { return; } - if (state->status == F_combarudoo || state->status == F_bound) continue; + if (state->status == F_combarudoo || state->status == F_bound) { + f_fss_skip_past_combining_joiner(buffer, range, state); + if (F_status_is_error(state->status)) return; + + continue; + } if (buffer.string[range->start] == list_open.string[0]) { flag_fl &= ~___fl_flag_has_graph_first___; diff --git a/level_1/fl_fss/c/private-fss.c b/level_1/fl_fss/c/private-fss.c index d6ec550d9..a7ec188ba 100644 --- a/level_1/fl_fss/c/private-fss.c +++ b/level_1/fl_fss/c/private-fss.c @@ -244,8 +244,14 @@ extern "C" { f_fss_count_slash(buffer, range, &slash_count, state); + if (state->status == F_combarudoo || state->status == F_bound) { + f_fss_skip_past_combining_joiner(buffer, range, state); + if (F_status_is_error(state->status)) return; + + continue; + } + if (F_status_is_error(state->status)) return; - if (state->status == F_combarudoo || state->status == F_bound) continue; if (range->start >= buffer.used) { found->stop = buffer.used - 1; @@ -287,7 +293,7 @@ extern "C" { // This check sets the state status, which is then used by the condition below. if (f_fss_is_space(buffer, *range, state) == F_true) { - if (state->status == F_control && buffer.string[range->start] == f_fss_eol_s.string[0]) { + if (buffer.string[range->start] == f_fss_eol_s.string[0]) { // The EOL is immediately valid and is not to be checked for combining/joiners. state->status = F_true; @@ -807,12 +813,18 @@ extern "C" { #define ___fl_flag_as_object___ 0x1 - #define ___fl_flag_do_handle___ 0x1 + #define ___fl_flag_do_handle___ 0x1 + #define ___fl_flag_has_combining___ 0x2 + #define ___fl_flag_has_combining_joiner___ 0xa + #define ___fl_flag_has_increased___ 0x4 + #define ___fl_flag_has_joiner___ 0x8 + #define ___fl_flag_is_quoted___ 0x10 + #define ___fl_flag_is_commented___ 0x20 + #define ___fl_flag_save_partial___ 0x40 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; @@ -836,36 +848,54 @@ extern "C" { if (F_status_is_error_not(state->status)) { if (f_fss_is_combining_joiner(object, *range, state) == F_true) { + flag_fl |= state->status == F_combarudoo + ? ___fl_flag_has_combining___ + : ___fl_flag_has_joiner___; + 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; + if (range->start > range->stop || range->start >= object.used) { + partial.stop = range->start; + } + else { - state->status = f_memory_array_increase_by(width, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); - } + // The joined character must be considered a new, different, character. + if (!(flag_fl & ___fl_flag_has_joiner___)) { + f_utf_buffer_decrement(object, range, 1); + } - if (F_status_is_error_not(state->status)) { - state->status = f_string_dynamic_partial_append_nulless(object, partial, destination); - } + flag_fl &= ~___fl_flag_has_combining_joiner___; - if (F_status_is_error_not(state->status)) { - state->status = f_utf_buffer_increment(object, range, 1); + if (F_status_is_error_not(state->status)) { + partial.stop = range->start; + + state->status = f_memory_array_increase_by((partial.stop - partial.start) + 4, 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); + } + } } } else if (F_status_is_error_not(state->status)) { range->start = input_start; if (object.string[input_start] == quote_char) { - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; } else { - commented = F_true; + flag_fl |= ___fl_flag_is_commented___; } } } - if (F_status_is_error(state->status)) return; + if (F_status_is_error(state->status)) { + destination->used = used_start; + + return; + } } for (; range->start <= range->stop && range->start < object.used; ) { @@ -878,67 +908,89 @@ extern "C" { flag_fl |= ___fl_flag_do_handle___; if (object.string[range->start] == f_fss_slash_s.string[0]) { - // TODO: Verify no combining joiners following. item_first = partial.start = range->start++; item_total = 1; f_fss_count_slash(object, range, &item_total, state); - if (F_status_is_error(state->status)) return; + if (F_status_is_error(state->status)) break; + // End of string or end of buffer can only happen when only slashes and delimit place holders are found. if (range->start > range->stop || range->start >= object.used) { + partial.stop = range->start; + flag_fl |= ___fl_flag_save_partial___; - // Slashes before the final quote must be escaped when quoted, add the delimit slashes. - if (quoted_is) { + // Slashes at end of line must be escaped when there is a quote. + if (flag_fl & ___fl_flag_is_quoted___) { + item_total *= 2; + } - // If this is the first quote, then only a single delimit slash is needed. - if (item_first == input_start) { - 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; + break; + } - destination->string[destination->used++] = f_fss_slash_s.string[0]; + if (object.string[range->start] == f_fss_eol_s.string[0]) { + state->status = F_status_set_error(F_okay_eol); + + break; + } + + // Found a combining/joiner, so the slashes do not escape anything. + if (state->status == F_combarudoo || state->status == F_bound) { + flag_fl |= state->status == F_combarudoo + ? ___fl_flag_has_combining___ + : ___fl_flag_has_joiner___; + } + else { + if (object.string[range->start] == quote_char || (flag & ___fl_flag_as_object___) && object.string[range->start] == f_fss_comment_s.string[0] || f_fss_is_space(object, *range, state) == F_true) { + partial.stop = range->start++; + + f_fss_skip_past_delimit(object, range, state); + + if (F_status_is_error_not(state->status) && f_fss_is_combining_joiner(object, *range, state) == F_true) { + flag_fl |= state->status == F_combarudoo + ? ___fl_flag_has_combining___ + : ___fl_flag_has_joiner___; } else { - state->status = f_memory_array_increase_by(item_total, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); - if (F_status_is_error(state->status)) break; - - for (i = 0; i < item_total; ++i) { - destination->string[destination->used++] = f_fss_slash_s.string[0]; - } // for + range->start = partial.stop; } } + } - state->status = f_memory_array_increase_by(item_total, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); - if (F_status_is_error(state->status)) break; + if (flag_fl & ___fl_flag_has_combining_joiner___) { + item_total = 0; - for (i = 0; i < item_total; ++i) { - destination->string[destination->used++] = f_fss_slash_s.string[0]; - } // for + f_fss_skip_past_combining_joiner(object, range, state); - break; + // The joined character must be considered a new, different, character. + if (F_status_is_error_not(state->status) && !(flag_fl & ___fl_flag_has_joiner___)) { + f_utf_buffer_decrement(object, range, 1); + } } - if (object.string[range->start] == f_fss_eol_s.string[0]) { - state->status = F_status_set_error(F_okay_eol); + if (F_status_is_error(state->status) || range->start > range->stop || range->start >= object.used) break; - break; - } + range->start = partial.stop; - if (object.string[range->start] == quote_char) { - // TODO: Verify no combining joiners following. - item_first = range->start++; + if (flag_fl & ___fl_flag_has_combining_joiner___) { + flag_fl |= ___fl_flag_save_partial___; + flag_fl &= ~___fl_flag_has_combining_joiner___; + } + else if (object.string[range->start] == quote_char) { + ++range->start; f_fss_skip_past_delimit(object, range, state); if (F_status_is_error(state->status)) break; if (range->start > range->stop || range->start >= object.used) { - state->status = f_memory_array_increase_by(item_total + 1, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(item_total + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; - for (i = 0; i < item_total; ++i) { + for (i = 0; i < item_total; ++i) { // TODO: what is the correct number of slashes? destination->string[destination->used++] = f_fss_slash_s.string[0]; } // for destination->string[destination->used++] = quote_char; + item_total = 0; break; } @@ -948,15 +1000,16 @@ extern "C" { if (F_status_is_error(state->status)) break; } else { + // TODO: Verify no combining joiners following. if (object.string[range->start] == f_fss_eol_s.string[0]) { state->status = F_status_set_error(F_okay_eol); break; } - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; - state->status = f_memory_array_increase_by(item_total + 1, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(item_total + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; // Add the slashes that delimit the slashes. @@ -972,7 +1025,7 @@ extern "C" { width = macro_f_utf_byte_width(object.string[range->start]); - state->status = f_memory_array_increase_by(item_total + width + 1, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(item_total + width + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; for (i = 0; i < item_total; ++i) { @@ -984,6 +1037,7 @@ extern "C" { memcpy(destination->string + destination->used, object.string + range->start, width); destination->used += width; + item_total = 0; } else if ((flag & ___fl_flag_as_object___) && object.string[range->start] == f_fss_comment_s.string[0]) { // TODO: Verify no combining joiners following. @@ -993,7 +1047,7 @@ extern "C" { commented = F_true; } - state->status = f_memory_array_increase_by(item_total + 1, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(item_total + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; for (i = 0; i < item_total; ++i) { @@ -1001,28 +1055,30 @@ extern "C" { } // for destination->string[destination->used++] = object.string[range->start++]; + item_total = 0; continue; } else { - // If any space is found, then this must be quote. + // If any space is found, then this must be quoted. if (f_fss_is_space(object, *range, state) == F_false) { if (F_status_is_error(state->status)) break; } else { + // TODO: combining joiner check against space. if (object.string[range->start] == f_fss_eol_s.string[0]) { state->status = F_status_set_error(F_okay_eol); break; } - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; } width = macro_f_utf_byte_width(object.string[range->start]); - state->status = f_memory_array_increase_by(item_total + width, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(item_total + width + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; // There is nothing to delimit, so all slashes should be printed as is. @@ -1033,16 +1089,17 @@ extern "C" { memcpy(destination->string + destination->used, object.string + range->start, width); destination->used += width; + item_total = 0; } flag_fl &= ~___fl_flag_do_handle___; } else if (object.string[range->start] == quote_char) { // TODO: Verify no combining joiners following. - item_first = range->start++; + item_first = partial.start = range->start++; f_fss_skip_past_delimit(object, range, state); - if (F_status_is_error(state->status)) return; + if (F_status_is_error(state->status)) break; if (range->start > range->stop || range->start >= object.used) { state->status = f_memory_array_increase(state->step_large, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); @@ -1080,12 +1137,12 @@ extern "C" { destination->string[destination->used++] = f_fss_slash_s.string[0]; - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; } width = macro_f_utf_byte_width(object.string[range->start]); - state->status = f_memory_array_increase_by(width + 1, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(width + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; destination->string[destination->used++] = quote_char; @@ -1102,20 +1159,33 @@ extern "C" { break; } - if (flag_fl & ___fl_flag_do_handle___ && object.string[range->start] != f_fss_placeholder_s.string[0]) { - if (!quoted_is) { + if (flag_fl & ___fl_flag_save_partial___) { + flag_fl &= ~___fl_flag_save_partial___; + + if (partial.start <= partial.stop) { + state->status = f_memory_array_increase_by((partial.stop - partial.start) + 4, 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(state->status)) break; + } + } + else if ((flag_fl & ___fl_flag_do_handle___) && object.string[range->start] != f_fss_placeholder_s.string[0]) { + if (!(flag_fl & ___fl_flag_is_quoted___)) { 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); - if (F_status_is_error(state->status)) return; + if (F_status_is_error(state->status)) break; if (range->start > range->stop || range->start >= object.used || object.string[range->start] == object.string[item_first]) { - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; } else if (f_fss_is_space(object, *range, state) == F_true) { - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; } else if (F_status_is_error(state->status)) { break; @@ -1128,13 +1198,13 @@ extern "C" { if (F_status_is_error(state->status)) break; } else { - quoted_is = F_true; + flag_fl |= ___fl_flag_is_quoted___; } } width = macro_f_utf_byte_width(object.string[range->start]); - state->status = f_memory_array_increase_by(width, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + state->status = f_memory_array_increase_by(width + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); if (F_status_is_error(state->status)) break; memcpy(destination->string + destination->used, object.string + range->start, width); @@ -1146,27 +1216,36 @@ extern "C" { if (F_status_is_error(state->status)) break; } // for - if (F_status_is_error(state->status)) { - destination->used = used_start; + if (F_status_is_error_not(state->status) && (flag_fl & ___fl_flag_save_partial___)) { + if (range->start > range->stop || range->start >= object.used) { + if (partial.start <= partial.stop) { + state->status = f_memory_array_increase_by((partial.stop - partial.start) + 4, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); - return; + if (F_status_is_error_not(state->status)) { + flag_fl |= ___fl_flag_has_increased___; + + state->status = f_string_dynamic_partial_append_nulless(object, partial, destination); + } + } + } } - if (quoted_is) { - state->status = f_memory_array_increase_by(state->step_small + 2, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + if (F_status_is_error_not(state->status) && (flag_fl & ___fl_flag_is_quoted___) && !(flag_fl & ___fl_flag_has_increased___)) { + state->status = f_memory_array_increase_by(state->step_small + 3, sizeof(f_char_t), (void **) &destination->string, &destination->used, &destination->size); + } - if (F_status_is_error(state->status)) { - destination->used = used_start; + if (F_status_is_error(state->status)) { + destination->used = used_start; - return; - } + return; + } + if (flag_fl & ___fl_flag_is_quoted___) { destination->string[used_start] = quote_char; destination->string[destination->used++] = quote_char; - // The start quote may or may not need to be delimited in this case. + // The start quote may or may not need to be delimited in this case. // TODO: save start quote position? Review this logic. 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) { @@ -1218,6 +1297,13 @@ extern "C" { #undef ___fl_flag_as_object___ #undef ___fl_flag_do_handle___ + #undef ___fl_flag_has_combining___ + #undef ___fl_flag_has_combining_joiner___ + #undef ___fl_flag_has_increased___ + #undef ___fl_flag_has_joiner___ + #undef ___fl_flag_is_quoted___ + #undef ___fl_flag_is_commented___ + #undef ___fl_flag_save_partial___ } #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_) diff --git a/level_1/fl_fss/c/private-fss.h b/level_1/fl_fss/c/private-fss.h index c1cf9173c..f85248402 100644 --- a/level_1/fl_fss/c/private-fss.h +++ b/level_1/fl_fss/c/private-fss.h @@ -83,6 +83,7 @@ extern "C" { * Errors (with error bit) from: f_fss_is_zero_width(). * Errors (with error bit) from: f_fss_skip_past_delimit(). * Errors (with error bit) from: f_fss_skip_past_space(). + * Errors (with error bit) from: f_utf_buffer_decrement(). * Errors (with error bit) from: f_utf_buffer_increment(). * Errors (with error bit) from: f_utf_is_combining_joiner(). * @@ -97,6 +98,7 @@ extern "C" { * @see f_fss_is_zero_width() * @see f_fss_skip_past_delimit() * @see f_fss_skip_past_space() + * @see f_utf_buffer_decrement() * @see f_utf_buffer_increment() * @see f_utf_is_combining_joiner() * @see fl_fss_basic_object_read() -- 2.52.0