From: Kevin Day Date: Sun, 8 Dec 2024 01:55:01 +0000 (-0600) Subject: Bugfix: The -t/--total in iki_read is confusing and allow for --total with --whole. X-Git-Tag: 0.6.13~26 X-Git-Url: https://git.kevux.org/?a=commitdiff_plain;h=e328a5f376c39d22028e7e8b7d473b4d2ef28a5e;p=fll Bugfix: The -t/--total in iki_read is confusing and allow for --total with --whole. The `--total` parameter should print the total number of IKI Variables. The `--line` parameter is selecting based on the line as if the `--whole` parameter is based (even when it is not). This makes little sense when in the `--content` that is the default behavior. This solves part of that confusion by focusing on the `--total` parameter. Using the `--whole` should also print the total number of lines rather than total number of Variables. I will need to follow this up with runtime tests. There are none at this time so a separate commit is needed to add all of the appropriate tests. --- diff --git a/level_3/iki_read/c/common.h b/level_3/iki_read/c/common.h index 68260b5..0cdd8de 100644 --- a/level_3/iki_read/c/common.h +++ b/level_3/iki_read/c/common.h @@ -69,7 +69,6 @@ extern "C" { iki_read_mode_content_e = 1, iki_read_mode_literal_e, iki_read_mode_object_e, - iki_read_mode_total_e, }; #endif // _di_iki_read_defines_ diff --git a/level_3/iki_read/c/iki_read.c b/level_3/iki_read/c/iki_read.c index 6fff74b..ac0a14c 100644 --- a/level_3/iki_read/c/iki_read.c +++ b/level_3/iki_read/c/iki_read.c @@ -119,6 +119,19 @@ extern "C" { fl_print_format(" The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_substitute_s, context.set.notable); fl_print_format(" option takes priority over the %[%r%r%] option when matching the same Variable.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_replace_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" Using both %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_total_s, context.set.notable); + fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_whole_s, context.set.notable); + fl_print_format(" will result in a total representing the number of lines rather than number of Variables.%r", file.stream, f_string_eol_s); + + fl_print_format(" Using all three of %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_total_s, context.set.notable); + fl_print_format(", %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_whole_s, context.set.notable); + fl_print_format(", and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_line_s, context.set.notable); + fl_print_format(" will result in a total number of Variables at the given line in the whole file.%r", file.stream, f_string_eol_s); + + fl_print_format(" Using %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_total_s, context.set.notable); + fl_print_format(" with %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_name_s, context.set.notable); + fl_print_format(" will result in a total number of Variables matching the Vocabulary name.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" The default behavior is to only display Content portion of the IKI Variable.%r%r", file.stream, f_string_eol_s, f_string_eol_s); funlockfile(file.stream); @@ -423,35 +436,14 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_object_s, iki_read_long_total_s); - } - - status = F_status_set_error(F_parameter); - } - data.mode = iki_read_mode_object_e; } - else if (main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { - data.mode = iki_read_mode_total_e; - } else { // This is the default behavior, so there is no reason to check for the -c/--content parameter. data.mode = iki_read_mode_content_e; } - if (main->parameters.array[iki_read_parameter_whole_e].result == f_console_result_found_e) { - if (main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_program_parameter_long_print_cannot_use_with(main->error, iki_read_long_whole_s, iki_read_long_total_s); - } - - status = F_status_set_error(F_parameter); - } - } - if (F_status_is_error(status)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { fll_print_dynamic_raw(f_string_eol_s, main->error.to.stream); diff --git a/level_3/iki_read/c/private-read.c b/level_3/iki_read/c/private-read.c index 229cde7..53a4e01 100644 --- a/level_3/iki_read/c/private-read.c +++ b/level_3/iki_read/c/private-read.c @@ -41,15 +41,13 @@ extern "C" { f_status_t status = F_none; f_iki_data_t iki_data = f_iki_data_t_initialize; - if (data->main->parameters.array[iki_read_parameter_whole_e].result == f_console_result_found_e) { + if (data->main->parameters.array[iki_read_parameter_whole_e].result == f_console_result_found_e && data->main->parameters.array[iki_read_parameter_total_e].result == f_console_result_none_e) { f_string_range_t buffer_range = macro_f_string_range_t_initialize2(data->buffer.used); status = iki_read_process_at(data, &buffer_range); if (status == F_true) { - if (buffer_range.start > data->buffer.used) { - return F_data_not; - } + if (buffer_range.start > data->buffer.used) return F_data_not; } else if (status == F_data_not) { return F_data_not; @@ -65,8 +63,19 @@ extern "C" { status = iki_read_process_buffer_ranges_whole(data, buffer_range, &iki_data, &iki_data.vocabulary); } } - else if (data->mode == iki_read_mode_total_e) { - status = iki_read_process_buffer_total(data, &iki_data); + else if (data->main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e && data->main->parameters.array[iki_read_parameter_whole_e].result == f_console_result_found_e) { + if (data->main->parameters.array[iki_read_parameter_line_e].result == f_console_result_additional_e) { + status = iki_read_process_buffer_total(data, &iki_data); + } + else { + f_number_unsigned_t total = 0; + + for (f_number_unsigned_t i = 0; i < data->buffer.used; ++i) { + if (data->buffer.string[i] == f_string_eol_s.string[0]) ++total; + } // for + + fll_print_format("%ul%r", data->main->output.to.stream, total, f_string_eol_s); + } } else { f_string_range_t buffer_range = macro_f_string_range_t_initialize2(data->buffer.used); @@ -101,8 +110,6 @@ extern "C" { f_status_t status = F_none; - bool unmatched = F_true; - { f_state_t state = macro_f_state_t_initialize(iki_read_common_allocation_large_d, iki_read_common_allocation_small_d, 0, 0, &fll_program_standard_signal_state, 0, (void *) data->main, 0); @@ -115,11 +122,25 @@ extern "C" { return status; } - for (f_array_length_t i = 0; i < iki_data->delimits.used; ++i) { + if (data->main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e && data->main->parameters.array[iki_read_parameter_name_e].result == f_console_result_none_e) { + if (data->main->parameters.array[iki_read_parameter_at_e].result == f_console_result_additional_e) { + fll_print_format("%ul%r", data->main->output.to.stream, data->at < iki_data->variable.used ? 1 : 0, f_string_eol_s); + } + else { + fll_print_format("%ul%r", data->main->output.to.stream, iki_data->variable.used, f_string_eol_s); + } + + return F_none; + } + + f_array_length_t i = 0; + + for (; i < iki_data->delimits.used; ++i) { data->buffer.string[iki_data->delimits.array[i]] = f_iki_syntax_placeholder_s.string[0]; } // for const bool content_only = data->mode == iki_read_mode_content_e; + bool unmatched = F_true; iki_read_substitution_t replacements[iki_data->variable.used]; iki_read_substitution_t wraps[iki_data->variable.used]; @@ -131,7 +152,7 @@ extern "C" { memset(reassignments, 0, sizeof(iki_read_substitutions_t) * iki_data->variable.used); memset(substitutionss, 0, sizeof(iki_read_substitutions_t) * iki_data->variable.used); - if (data->mode == iki_read_mode_literal_e || data->mode == iki_read_mode_content_e) { + if (data->mode == iki_read_mode_literal_e || (data->mode == iki_read_mode_content_e && data->main->parameters.array[iki_read_parameter_total_e].result == f_console_result_none_e)) { status = iki_read_replacements_identify(data, &iki_data->vocabulary, replacements); if (F_status_is_error(status)) { @@ -157,9 +178,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_print(data->main->error, F_status_set_fine(status), "iki_read_substitutions_identify", F_true); - f_array_length_t i = 0; - - for (; i < iki_data->variable.used; ++i) { + for (i = 0; i < iki_data->variable.used; ++i) { macro_iki_read_substitutions_t_delete_simple(reassignments[i]); } // for @@ -175,12 +194,12 @@ extern "C" { f_string_dynamic_t name = f_string_dynamic_t_initialize; f_array_length_t index = 0; - f_array_length_t i = 0; f_array_length_t j = 0; f_array_length_t matches = 0; + buffer_range->start = 0; - for (; i < data->main->parameters.array[iki_read_parameter_name_e].values.used; ++i) { + for (i = 0; i < data->main->parameters.array[iki_read_parameter_name_e].values.used; ++i) { index = data->main->parameters.array[iki_read_parameter_name_e].values.array[i]; name.used = 0; @@ -190,14 +209,12 @@ extern "C" { if (F_status_is_error(status)) { fll_error_print(data->main->error, F_status_set_fine(status), "f_string_dynamic_append_nulless", F_true); - f_array_length_t i = 0; - - for (; i < iki_data->variable.used; ++i) { - macro_iki_read_substitutions_t_delete_simple(reassignments[i]); + for (j = 0; j < iki_data->variable.used; ++j) { + macro_iki_read_substitutions_t_delete_simple(reassignments[j]); } // for - for (i = 0; i < iki_data->variable.used; ++i) { - macro_iki_read_substitutions_t_delete_simple(substitutionss[i]); + for (j = 0; j < iki_data->variable.used; ++j) { + macro_iki_read_substitutions_t_delete_simple(substitutionss[j]); } // for f_string_dynamic_resize(0, &name); @@ -220,20 +237,34 @@ extern "C" { if (matches++ != data->at) continue; } - if (replacements[j].replace.used || wraps[j].replace.used || wraps[j].with.used || substitutionss[j].used || reassignments[j].used) { - iki_read_substitutions_print(data, *iki_data, *ranges, replacements[j], wraps[j], substitutionss[j], reassignments[j], j, content_only); + if (data->main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { + if (data->main->parameters.array[iki_read_parameter_at_e].result == f_console_result_none_e) { + ++matches; + } } else { - f_print_dynamic_partial(data->buffer, ranges->array[j], data->main->output.to.stream); + if (replacements[j].replace.used || wraps[j].replace.used || wraps[j].with.used || substitutionss[j].used || reassignments[j].used) { + iki_read_substitutions_print(data, *iki_data, *ranges, replacements[j], wraps[j], substitutionss[j], reassignments[j], j, content_only); + } + else { + f_print_dynamic_partial(data->buffer, ranges->array[j], data->main->output.to.stream); + } + + f_print_dynamic_raw(f_string_eol_s, data->main->output.to.stream); } - - f_print_dynamic_raw(f_string_eol_s, data->main->output.to.stream); } } // for funlockfile(data->main->output.to.stream); } // for + if (data->main->parameters.array[iki_read_parameter_total_e].result == f_console_result_found_e) { + fll_print_format("%ul%r", data->main->output.to.stream, + data->main->parameters.array[iki_read_parameter_at_e].result == f_console_result_additional_e + ? data->at < matches ? 1 : 0 + : matches, f_string_eol_s); + } + f_string_dynamic_resize(0, &name); if (unmatched) { @@ -268,7 +299,7 @@ extern "C" { else { flockfile(data->main->output.to.stream); - for (f_array_length_t i = 0; i < ranges->used; ++i) { + for (i = 0; i < ranges->used; ++i) { if (replacements[i].replace.used || wraps[i].replace.used || wraps[i].with.used || substitutionss[i].used || reassignments[i].used) { iki_read_substitutions_print(data, *iki_data, *ranges, replacements[i], wraps[i], substitutionss[i], reassignments[i], i, content_only); @@ -289,9 +320,7 @@ extern "C" { status = F_data_not; } - f_array_length_t i = 0; - - for (; i < iki_data->variable.used; ++i) { + for (i = 0; i < iki_data->variable.used; ++i) { macro_iki_read_substitutions_t_delete_simple(reassignments[i]); } // for