const f_number_unsigned_t begin = range->start;
found->array[found->used].start = range->start;
- f_number_unsigned_t newline_last = range->start;
+ f_number_unsigned_t newline_last = begin;
+ f_number_unsigned_t previous = 0;
f_number_unsigned_t slash_first = 0;
f_number_unsigned_t slash_count = 0;
- f_number_unsigned_t start = 0;
+ f_number_unsigned_t start = begin;
f_number_unsigned_t comment_delimit = 0;
uint8_t flag_fl = ___fl_flag_has_graph_first___;
break;
}
- if (F_status_is_error(state->status)) return;
+ if (F_status_is_error(state->status)) break;
if (buffer.string[range->start] != f_fss_slash_s.string[0]) break;
++slash_count;
- } // while
+ } // for
- if (F_status_is_error(state->status)) return;
+ if (F_status_is_error(state->status)) break;
if (range->start > range->stop || range->start >= buffer.used) break;
if (!(flag_fl & ___fl_flag_do_escape___)) continue;
slash_count = 0;
f_fss_skip_past_combining_joiner(buffer, range, state);
+ if (F_status_is_error(state->status)) break;
continue;
}
- if (F_status_is_error(state->status) || state->status == F_data_not) return;
+ if (state->status == F_data_not) return;
+ if (F_status_is_error(state->status)) break;
if (range->start > range->stop || range->start >= buffer.used) break;
if (state->status == F_okay_eol) {
+ newline_last = start;
start = range->start;
range->start = slash_first;
slash_count = 0;
}
}
-
- // TODO: Resume here.
else if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) {
- // TODO: check combining/joiner.
- flag_fl &= ___fl_flag_has_delimit_comment___;
- comment_delimit = slash_first;
++range->start;
+
+ if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+ flag_fl &= ~___fl_flag_has_graph_first_do_escape___;
+ slash_count = 0;
+
+ f_fss_skip_past_combining_joiner(buffer, range, state);
+ if (F_status_is_error(state->status)) break;
+ }
+ else {
+ if (F_status_is_error(state->status)) break;
+
+ flag_fl &= ___fl_flag_has_delimit_comment___;
+ comment_delimit = slash_first;
+ }
}
continue;
++range->start;
flag_fl &= ~___fl_flag_has_delimit_comment_graph_first___;
- // TODO: check combining/joiner.
-
- while (range->start <= range->stop && range->start < buffer.used) { // TODO: replace with seek to eol?
+ if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+ flag_fl &= ~___fl_flag_has_graph_first_do_escape___;
+ slash_count = 0;
- if (state->interrupt) {
- state->interrupt((void *) state, 0);
- if (F_status_set_fine(state->status) == F_interrupt) break;
- }
+ f_fss_skip_past_combining_joiner(buffer, range, state);
+ if (F_status_is_error(state->status)) break;
- if (buffer.string[range->start] == f_fss_eol_s.string[0]) break;
- if (f_fss_is_space(buffer, *range, state) == F_false) break;
+ continue;
+ }
- state->status = f_utf_buffer_increment(buffer, range, 1);
- if (F_status_is_error(state->status)) break;
- } // while
+ if (F_status_is_error_not(state->status)) {
+ f_fss_skip_past_space(buffer, range, state);
+ }
if (F_status_is_error(state->status)) break;
if (range->start > range->stop || range->start >= buffer.used) break;
// Found a valid object, set stop point to last newline.
- if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
- if (newline_last == found->array[found->used].start && buffer.string[found->array[found->used].start] != f_fss_eol_s.string[0]) {
- range->start = newline_last;
- state->status = F_fss_found_content_not;
+ if (state->status == F_okay_eol) {
+ previous = range->start;
+ range->start = start;
- return;
- }
+ if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+ range->start = previous;
- range->start = newline_last + 1;
- found->array[found->used++].stop = newline_last;
- state->status = F_fss_found_content;
+ if (flag_fl & ___fl_flag_has_delimit_comment___) {
+ state->status = f_memory_array_increase(state->step_small, sizeof(f_number_unsigned_t), (void **) &delimits->array, &delimits->used, &delimits->size);
+ if (F_status_is_error(state->status)) break;
- return;
- }
+ delimits->array[delimits->used++] = comment_delimit;
+ }
+
+ newline_last = range->start;
+ start = ++range->start;
+ flag_fl |= ___fl_flag_has_graph_first___;
+ }
+ else {
+ range->start = previous;
- if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
- if (flag_fl & ___fl_flag_has_delimit_comment___) {
- state->status = f_memory_array_increase(state->step_small, sizeof(f_number_unsigned_t), (void **) &delimits->array, &delimits->used, &delimits->size);
if (F_status_is_error(state->status)) break;
- delimits->array[delimits->used++] = comment_delimit;
- }
+ if (newline_last == found->array[found->used].start) {
+ found->array[found->used++].stop = range->start++;
+ }
+ else {
+ range->start = newline_last + 1;
+ found->array[found->used++].stop = newline_last;
+ }
- newline_last = range->start;
- flag_fl |= ___fl_flag_has_graph_first___;
+ state->status = F_fss_found_content;
+
+ return;
+ }
}
continue;
}
if ((flag_fl & ___fl_flag_has_graph_first___) && buffer.string[range->start] == f_fss_comment_s.string[0]) {
- // TODO: check combining/joiner.
+ previous = range->start++;
- // The newline_last is initialized to the range->start, which may not actually be a new line.
- if (buffer.string[newline_last] == f_string_eol_s.string[0]) {
- start = newline_last + 1;
- }
- else {
- start = newline_last;
+ if (f_fss_is_combining_joiner(buffer, *range, state) == F_true) {
+ flag_fl &= ~___fl_flag_has_graph_first_do_escape___;
+ slash_count = 0;
+
+ f_fss_skip_past_combining_joiner(buffer, range, state);
+ if (F_status_is_error(state->status)) break;
+
+ continue;
}
- f_fss_seek_to_eol(buffer, range, state);
if (F_status_is_error(state->status)) break;
- state->status = f_memory_array_increase(state->step_small, sizeof(f_range_t), (void **) &comments->array, &comments->used, &comments->size);
+ range->start = previous;
+
+ // The newline_last is initialized to the range->start, which may not actually be a new line.
+ start = buffer.string[newline_last] == f_string_eol_s.string[0]
+ ? newline_last + 1
+ : newline_last;
+
+ f_fss_seek_to_eol(buffer, range, state);
+
+ if (F_status_is_error_not(state->status)) {
+ state->status = f_memory_array_increase(state->step_small, sizeof(f_range_t), (void **) &comments->array, &comments->used, &comments->size);
+ }
+
if (F_status_is_error(state->status)) break;
if (range->start > range->stop || range->start >= buffer.used) {
return;
}
- if (range->start >= buffer.used) {
- found->array[found->used].stop = buffer.used - 1;
- state->status = F_okay_eos;
-
- return;
- }
-
- if (range->start > range->stop) {
- found->array[found->used].stop = range->stop;
- state->status = F_okay_stop;
-
- return;
- }
-
if (range->start > begin) {
- found->array[found->used++].stop = range->start - 1;
+ if (range->start >= buffer.used) {
+ found->array[found->used++].stop = buffer.used - 1;
+ }
+ else if (range->start > range->stop) {
+ found->array[found->used++].stop = range->stop;
+ }
+ else {
+ found->array[found->used++].stop = range->start - 1;
+ }
}
else {
found->array[found->used].start = 1;