]> Kevux Git Server - fll/commitdiff
Progress: Various changes and fixes.
authorKevin Day <Kevin@kevux.org>
Sun, 4 Oct 2026 00:51:17 +0000 (19:51 -0500)
committerKevin Day <Kevin@kevux.org>
Sun, 4 Oct 2026 00:51:17 +0000 (19:51 -0500)
I decided that I needed to expand the `f_fss_skip_past_space()` into `f_fss_skip_past_space_previous()` to expose the `previous` position variable to the caller.
I must avoid breaking the **API**/**ABI**, so `f_fss_skip_past_space()` is not changed.
This should simplify the embedded read functions.

Fix documentation, adding "Must not be NULL." where it is missing.

The man pages will need to be re-generated more than likely.
Just copy the `f_fss_skip_past_space()` man page and update it manually for now.

Add missing `_di_f_utf_is_zero_width_` check on `private_f_utf_character_is_joiner()`.

58 files changed:
build/disable/level_0/f_fss.h
build/level_0/settings
build/monolithic/settings
build/stand_alone/fake.config.h
build/stand_alone/fake.settings
build/stand_alone/fss_identify.config.h
build/stand_alone/fss_identify.settings
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_read.settings
build/stand_alone/fss_read.settings.fss_basic
build/stand_alone/fss_read.settings.fss_basic_list
build/stand_alone/fss_read.settings.fss_embedded_list
build/stand_alone/fss_read.settings.fss_extended
build/stand_alone/fss_read.settings.fss_extended_list
build/stand_alone/fss_read.settings.fss_payload
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/fss_write.settings
build/stand_alone/fss_write.settings.fss_basic
build/stand_alone/fss_write.settings.fss_basic_list
build/stand_alone/fss_write.settings.fss_embedded_list
build/stand_alone/fss_write.settings.fss_extended
build/stand_alone/fss_write.settings.fss_extended_list
build/stand_alone/fss_write.settings.fss_payload
build/stand_alone/status_code.config.fss.h
build/stand_alone/status_code.settings.fss
level_0/f_console/c/console.h
level_0/f_fss/c/fss.c
level_0/f_fss/c/fss.h
level_0/f_fss/c/private-fss.c [new file with mode: 0644]
level_0/f_fss/c/private-fss.h [new file with mode: 0644]
level_0/f_fss/data/build/settings
level_0/f_fss/data/build/settings-mocks
level_0/f_fss/data/build/settings-tests
level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_space_previous.3 [new file with mode: 0644]
level_0/f_fss/tests/unit/c/test-fss-skip_past_space_previous.c [new file with mode: 0644]
level_0/f_fss/tests/unit/c/test-fss-skip_past_space_previous.h [new file with mode: 0644]
level_0/f_fss/tests/unit/c/test-fss.c
level_0/f_fss/tests/unit/c/test-fss.h
level_0/f_utf/c/private-utf_joiner.c
level_0/f_utf/c/private-utf_joiner.h
level_1/fl_fss/c/fss/embedded_list.c
level_1/fl_fss/c/fss/extended_list.c
level_1/fl_fss/c/fss/private-payload-helper.h
level_1/fl_fss/c/fss/private-payload.h
level_1/fl_fss/c/private-fss-list.h
level_1/fl_fss/c/private-fss.h

index 85066c34a5ebf87308d218cbae339ab5eafc0822..287ed0578462f22f5c3fdfe35ea012d7fde6e349 100644 (file)
 #define _di_f_fss_skip_past_combining_
 #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_fss_status_code_e_
 #define _di_f_fss_type_s_
index 06355780e832b65220641a5f8c682430344dcf88..15bd1d9a844d195f0b626b90cbf58a6c59e069e7 100644 (file)
@@ -107,6 +107,7 @@ build_sources_library environment.c
 build_sources_library execute.c
 build_sources_library file.c private-file.c file/common.c file/stream.c
 build_sources_library fss.c fss/common.c fss/item.c fss/named.c fss/nest.c fss/payload.c fss/quote.c fss/set.c fss/set_quote.c fss/simple_packet.c
+build_sources_library private-fss.c
 build_sources_library iki.c iki/common.c iki/data.c iki/eki.c private-iki.c iki/private-data.c iki/private-eki.c
 build_sources_library limit.c limit/set.c limit/value.c
 build_sources_library memory.c memory/array.c memory/arrays.c
index 4438c0978a14c0a9f11d3cbc45296636c9af29d7..9fac4ba8d81ef92f07030c198acc3b3df2f90600 100644 (file)
@@ -129,6 +129,7 @@ build_sources_library level_0/environment.c
 build_sources_library level_0/execute.c
 build_sources_library level_0/file.c level_0/private-file.c level_0/file/common.c level_0/file/stream.c
 build_sources_library level_0/fss.c level_0/fss/common.c level_0/fss/item.c level_0/fss/named.c level_0/fss/nest.c level_0/fss/payload.c level_0/fss/quote.c level_0/fss/set.c level_0/fss/set_quote.c level_0/fss/simple_packet.c
+build_sources_library level_0/private-fss.c
 build_sources_library level_0/iki.c level_0/iki/common.c level_0/iki/data.c level_0/iki/eki.c level_0/private-iki.c level_0/iki/private-data.c level_0/iki/private-eki.c
 build_sources_library level_0/limit.c level_0/limit/set.c level_0/limit/value.c
 build_sources_library level_0/memory.c level_0/memory/array.c level_0/memory/arrays.c
index f7929b22f8227f314dbe1277c4f1ca2d26e73b42..4664af0e7766775b237490cd5934dfd3891fc974 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 7a96f19da89d2fad572847edd8c4f61fb771dd02..b8f7f96786d13c4df1adeceac84a30cd4227ed74 100644 (file)
@@ -54,6 +54,7 @@ build_sources_program fll/level_0/environment.c
 build_sources_program fll/level_0/execute.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/iki.c fll/level_0/private-iki.c fll/level_0/iki/common.c fll/level_0/iki/private-data.c fll/level_0/iki/private-eki.c fll/level_0/iki/data.c fll/level_0/iki/eki.c
 build_sources_program fll/level_0/limit.c fll/level_0/limit/set.c fll/level_0/limit/value.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
index c5ec66144193da81e8e34c727f973b926560a88d..d67fb67b5efd236e0374b199d9471d20680d37a9 100644 (file)
 #define _di_f_fss_skip_past_combining_
 #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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index eba85c76f03542b04e46b5fd8b4835ec0a97683f..750257340888f9dab7879b5fa77c93970c45db5c 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index c13faf7e4ef128ff4d51b892df9367ef99e250f8..a9277040b5be20e25ed9ca90b2a249547f7272ad 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index a9c09672b5bce45172eb29e53b7eb1473b1b6db6..bfcb03b39f831dc076d1a9bfdafafae4b1f9a7f7 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 76d4432d878b7545c9b020c82b95b2ab65894866..f961cdebebbbee60c637e042ac6200aec8a6117f 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 4afaa2f3931f699df1c57b26b582c7b4f5135979..20590656ef76cbbaad1c7b015ac1d63c25c2939f 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index f20d0b8a7ead40c3ae5557cf5cbaf3fcb5aadaa0..9275671f00d3c6b015a3fb1c9801e651a501e3a6 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index fe4e52a703a8a98cec8c3ec55b47c810ecfb3fb2..7dd5fde1074404340f8ef878bced129d0be7d56a 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 454818307578b465f27bf8ac8e588d8e0c7df1ac..da6dea24e935ca2c8403732f4f894edb7046a831 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index d47ec96dc3d066522d259976656d9471e8326b8f..8c46c6e787d6cc8389599b5d2815dbe30b55ba8f 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index f319bf0a389faceab2d70db9bf8238a2453c9580..cd72e0405adbc4b6884dca417c0205d59b53163d 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 4f465b59499b004a3f1b8b5a0c25e1d4031d9de0..c920d41876b76228c26fe5fb496fd0b6069c9691 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 6c1af8f91cd66b639b9b5564a1b4244d8f027eb0..53d5da50c730fcc856e6f3b4addc4bd364b4678d 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 17eaa05018d9d865ab43a8443f068fd30cce5939..a4d0c3645d2b96ebd64340f7efb37fc330993516 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 7d75d88f9630b7df3b69546f53373f689a91d2c3..d62be4cdbb7b8a223805c5800e98ba6f03185592 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 002983a3f55dd331c3740b31685f699e0a3beddb..c4eeba2eda813d8fc682710943e5062067ec32b4 100644 (file)
@@ -48,6 +48,7 @@ build_sources_program fll/level_0/directory.c fll/level_0/directory/common.c fll
 build_sources_program fll/level_0/private-directory.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 8a08814bd5edd95d486ef06651fe3af7fce9ead2..f5a8a965de1ccd743acea76875a83cf10ba45418 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index dd8ca1d5500059ce6ec1201ad06505dab991f3db..73b9f51049f4f62c7a0fd841f9dacc984c48b8a9 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index e75dcc95364d945b24cda7e52c935cdbe5c7ef78..db29a22a84110cdab59ebb304b8bd133b99d3017 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 1df9742f303c72569db5bc076e6ddda3f8db9518..101cb9b12158ff38296d150c8ef7655207838e1e 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 7115d1ab7724bb41032312c0dd06b328af7da438..17e6eea917aef049321473e306e3afb7756cae10 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 8a0154dcd79251462aab757fbbd3bc2da271d36d..d3499ca2858a2916ff36afc7ca668ec02df0120e 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index 35818b99d7b18f08f0d0ba80fc45688a58cfa45f..8421653ae2d3744deb4ee54dd577467650e2b168 100644 (file)
 //#define _di_f_fss_skip_past_combining_
 //#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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index b46ec2d0cd8e275c626541afb453a51f3630ccb7..11b94a9e41fa96e890468628ccbaf5feb6dc70bd 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index eb432d2b0e4b1e8ed249b0fdd4b847ee33c31d62..13c650c1842eb8175cec084a77edf8141c5f4c88 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 4670764cb74811a2673acc2605040a04276f4bbe..66ecdcf8842ab89de0dc312c8a392812abf74f84 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 11b8cffcc557b7db666c0c64c10e1acbbab12228..53fb614e5328dad7be526bd93135586b108448d5 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 8820bac5fb5e6072920b75cdf952ba7b237f6130..eb45958d3e637d4c386f8c5a7f3f4a0ce88b56f6 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index f4475097a4912c6f82a25d64525f25068374e27b..160f2e45fa8f10642d472830817ea12a6c9817c6 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 987472ad62d0b8288fb69c1ca50520bbb3250431..28305e052c765fad91d2613370c8c2178f9b9461 100644 (file)
@@ -46,6 +46,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
index 0068944724882e27fecc7492c72abaf7d3a7b6f8..1c40e66dd548d7d664739f8d69bdb72a95052b2e 100644 (file)
 #define _di_f_fss_skip_past_combining_
 #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_fss_status_code_e_
 //#define _di_f_fss_type_s_
index affed562a14ad18042e988e95c988f8c800b1fbf..233f90ee1fad6a0b65ac4fed82dc11834b35d41f 100644 (file)
@@ -45,6 +45,7 @@ build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/lev
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
 build_sources_program fll/level_0/file.c fll/level_0/private-file.c fll/level_0/file/common.c fll/level_0/file/stream.c
 build_sources_program fll/level_0/fss.c fll/level_0/fss/common.c fll/level_0/fss/item.c fll/level_0/fss/named.c fll/level_0/fss/nest.c fll/level_0/fss/payload.c fll/level_0/fss/quote.c fll/level_0/fss/set.c fll/level_0/fss/set_quote.c fll/level_0/fss/simple_packet.c
+build_sources_program fll/level_0/private-fss.c
 build_sources_program fll/level_0/memory.c fll/level_0/memory/array.c fll/level_0/memory/arrays.c
 build_sources_program fll/level_0/private-memory.c fll/level_0/memory/private-array.c
 build_sources_program fll/level_0/pipe.c
index 4c68ae3246a9223fd77cb39603fce4bec76c8116..a1f2570b2c2055cdb8e1abc2bf44b1e27f145931 100644 (file)
@@ -162,6 +162,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not if argc is 0, argv is a NULL pointer, or if argv[0] is NULL.
index f00cf385dd23b67958350756b7664f656d678805..e7342db2a189c075f98781fa330f9add6f5d8df8 100644 (file)
@@ -1,4 +1,5 @@
 #include "fss.h"
+#include "private-fss.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -647,177 +648,33 @@ 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
-
     f_number_unsigned_t previous = range->start;
 
-    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;
-      }
+    private_f_fss_skip_past_space_previous(buffer, range, state, &previous);
+  }
+#endif // _di_f_fss_skip_past_space_
 
-      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);
+#ifndef _di_f_fss_skip_past_space_previous_
+  void 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) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!state) return;
 
-        f_fss_fail_utf(state);
+      if (!range || !previous) {
+        state->status = F_status_set_error(F_parameter);
 
         return;
       }
-    }
-
-    // Check that the first character is not a combining character or a joiner character.
-    state->status = f_utf_is_combining_joiner(
-      buffer.string + previous,
-      (range->stop - previous) + 1 > buffer.used - previous
-        ? buffer.used - previous
-        : (range->stop - previous) + 1
-    );
-
-    f_fss_fail_utf_to_false(state);
-
-    if (F_status_is_error(state->status)) return;
+    #endif // _di_level_0_parameter_checking_
 
-    if (state->status == F_true) {
-      state->status = F_status_set_error(F_complete_not_utf_start);
+    if (!buffer.used || range->start > range->stop || range->start >= buffer.used) {
+      state->status = F_data_not;
 
       return;
     }
 
-    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_whitespace(
-        buffer.string + range->start,
-        (range->stop - range->start) + 1 > buffer.used - range->start
-          ? buffer.used - range->start
-          : (range->stop - range->start) + 1,
-        F_false
-      );
-
-      f_fss_fail_utf_to_false(state);
-
-      if (state->status == F_false) {
-        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);
-
-        // This is combining, so any previous white space is no longer considered white space as such.
-        if (state->status == F_true) {
-          range->start = previous;
-
-          break;
-        }
-
-        if (state->status == F_false) {
-          state->status = f_utf_is_control(
-            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) {
-            state->status = f_utf_is_zero_width(
-              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;
-
-      previous = range->start;
-
-      if (macro_f_utf_byte_width_is(buffer.string[previous])) {
-        if (previous + macro_f_utf_byte_width(buffer.string[previous]) >= buffer.used) {
-          state->status = F_status_set_error(F_complete_not_utf_eos);
-
-          f_fss_fail_utf(state);
-
-          return;
-        }
-
-        if (previous + macro_f_utf_byte_width(buffer.string[previous]) > 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[previous]);
-    } // for
-
-    state->status = F_okay;
+    private_f_fss_skip_past_space_previous(buffer, range, state, previous);
   }
-#endif // _di_f_fss_skip_past_space_
+#endif // _di_f_fss_skip_past_space_previous_
 
 #ifdef __cplusplus
 } // extern "C"
index 4e52900c4acb583a76025e4028ddd6b59dbaaef5..3fb6010d3036a3b9529b9af7c7131acfa5007f02 100644 (file)
@@ -45,9 +45,13 @@ extern "C" {
  *   An array of locations containing the delimits to apply within the buffer.
  * @param buffer
  *   The string to process.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but buffer.used is 0.
@@ -70,9 +74,13 @@ extern "C" {
  *   The range in which to restrict which delimits to apply.
  * @param buffer
  *   The string to process.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but buffer.used is 0.
@@ -99,9 +107,13 @@ extern "C" {
  *   The total lines found leading up to but not including before.
  *   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.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but buffer.used is 0 (line is set to 0).
@@ -128,9 +140,13 @@ extern "C" {
  *   The total lines found leading up to but not including before.
  *   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.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but the range.start is greater than buffer.used or buffer.used is 0 (line is set to 0).
@@ -153,6 +169,8 @@ extern "C" {
  *   - F_utf_fragment
  *   - F_utf_not
  *
+ *   Must not be NULL.
+ *
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
@@ -174,6 +192,8 @@ extern "C" {
  *   - F_utf_fragment
  *   - F_utf_not
  *
+ *   Must not be NULL.
+ *
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
@@ -203,6 +223,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     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 nothing is processed.
@@ -243,6 +265,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     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).
@@ -279,6 +303,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_data_not on success but nothing is processed.
  *     F_false if the character in the buffer is not a graph character.
@@ -319,6 +345,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_bound character in the buffer is a joiner character (future versions will provide a more accurate status, like F_join).
  *     F_data_not on success but nothing is processed.
@@ -352,6 +380,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_data_not on success but nothing is processed.
  *     F_false if the character in the buffer is not a space character.
@@ -395,6 +425,8 @@ extern "C" {
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_data_not on success but nothing is processed.
  *     F_false if the character in the buffer is not a zero-width character.
@@ -429,9 +461,13 @@ extern "C" {
  * @param range
  *   The start and stop positions in the buffer being processed.
  *   This increments range->start.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used.
@@ -459,9 +495,13 @@ extern "C" {
  * @param range
  *   The start and stop positions in the buffer being processed.
  *   This increments range->start.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success and last skipped (if any) character is neither a combining character nor a joiner character.
  *     F_bound on success and last skipped character is a joiner character (future versions will provide a more accurate status, like F_join).
@@ -493,9 +533,13 @@ extern "C" {
  * @param range
  *   The start and stop positions in the buffer being processed.
  *   This increments range->start.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used.
@@ -528,9 +572,13 @@ extern "C" {
  * @param range
  *   The start and stop positions in the buffer being processed.
  *   This increments range->start.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used.
@@ -558,6 +606,65 @@ extern "C" {
   extern void f_fss_skip_past_space(const f_string_static_t buffer, f_range_t * const range, f_state_t * const state);
 #endif // _di_f_fss_skip_past_space_
 
+/**
+ * Skip past all white space, control characters, and zero-width characters, except newline '\n' (U+000A), exposing the previous position to the caller.
+ *
+ * If the first character in the given range is a combining character, then this will not skip past anything.
+ * This is because combining characters apply from right to left.
+ * The caller should check the return status and handle accordingly in this situation.
+ *
+ * White space is checked for combining characters after the white space.
+ * If there is a combining character after, then the white space is not consider as such.
+ *
+ * This skips past place holders.
+ *
+ * This stops on end of line.
+ *
+ * This does not initializes previous.
+ * This is left to the caller.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The start and stop positions in the buffer being processed.
+ *   This increments range->start.
+ * @param state
+ *   A state for providing flags and handling interrupts during long running operations.
+ *
+ *   Must not be NULL.
+ *
+ *   This alters state.status:
+ *     F_okay on success.
+ *     F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used.
+ *     F_okay_eol on success and EOL was reached.
+ *     F_okay_eos on success and EOS was reached.
+ *     F_okay_stop on success and stop point was reached.
+ *
+ *     F_complete_not_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS.
+ *     F_complete_not_utf_start (with error bit) if the first character is a combining or a joiner character.
+ *     F_complete_not_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached.
+ *     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_is_combining_joiner().
+ *     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
+ *
+ *   Must not be NULL.
+ *
+ * @see f_utf_is_combining_joiner()
+ * @see f_utf_is_control()
+ * @see f_utf_is_whitespace()
+ * @see f_utf_is_zero_width()
+ */
+#ifndef _di_f_fss_skip_past_space_previous_
+  extern void 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);
+#endif // _di_f_fss_skip_past_space_previous_
+
 #ifdef __cplusplus
 } // extern "C"
 #endif
diff --git a/level_0/f_fss/c/private-fss.c b/level_0/f_fss/c/private-fss.c
new file mode 100644 (file)
index 0000000..bc326fc
--- /dev/null
@@ -0,0 +1,183 @@
+#include "fss.h"
+#include "private-fss.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#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) {
+
+    // 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;
+      }
+    }
+
+    // Check that the first character is not a combining character or a joiner character.
+    state->status = f_utf_is_combining_joiner(
+      buffer.string + *previous,
+      (range->stop - *previous) + 1 > buffer.used - *previous
+        ? buffer.used - *previous
+        : (range->stop - *previous) + 1
+    );
+
+    f_fss_fail_utf_to_false(state);
+
+    if (F_status_is_error(state->status)) return;
+
+    if (state->status == F_true) {
+      state->status = F_status_set_error(F_complete_not_utf_start);
+
+      return;
+    }
+
+    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_whitespace(
+        buffer.string + range->start,
+        (range->stop - range->start) + 1 > buffer.used - range->start
+          ? buffer.used - range->start
+          : (range->stop - range->start) + 1,
+        F_false
+      );
+
+      f_fss_fail_utf_to_false(state);
+
+      if (state->status == F_false) {
+        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);
+
+        // This is combining, so any previous white space is no longer considered white space as such.
+        if (state->status == F_true) {
+          range->start = *previous;
+
+          break;
+        }
+
+        if (state->status == F_false) {
+          state->status = f_utf_is_control(
+            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) {
+            state->status = f_utf_is_zero_width(
+              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;
+
+      *previous = range->start;
+
+      if (macro_f_utf_byte_width_is(buffer.string[*previous])) {
+        if (*previous + macro_f_utf_byte_width(buffer.string[*previous]) >= buffer.used) {
+          state->status = F_status_set_error(F_complete_not_utf_eos);
+
+          f_fss_fail_utf(state);
+
+          return;
+        }
+
+        if (*previous + macro_f_utf_byte_width(buffer.string[*previous]) > 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[*previous]);
+    } // for
+
+    state->status = F_okay;
+  }
+#endif // !defined(_di_f_fss_skip_past_space_) || !defined(_di_f_fss_skip_past_space_previous_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_fss/c/private-fss.h b/level_0/f_fss/c/private-fss.h
new file mode 100644 (file)
index 0000000..8a4a9d5
--- /dev/null
@@ -0,0 +1,65 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: File
+ * API Version: 0.8
+ * Licenses: clarified_1_0_or_later-lgpl_2_1_or_later
+ *
+ * Provides structures and data types for a file I/O.
+ * Provides operations for opening/closing files.
+ */
+#ifndef _PRIVATE_F_fss_h
+#define _PRIVATE_F_fss_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Private implementation of f_fss_skip_past_space_previous().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   The start and stop positions in the buffer being processed.
+ *   This increments range->start.
+ * @param state
+ *   A state for providing flags and handling interrupts during long running operations.
+ *
+ *   This alters state.status:
+ *     F_okay on success.
+ *     F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used.
+ *     F_okay_eol on success and EOL was reached.
+ *     F_okay_eos on success and EOS was reached.
+ *     F_okay_stop on success and stop point was reached.
+ *
+ *     F_complete_not_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS.
+ *     F_complete_not_utf_start (with error bit) if the first character is a combining or a joiner character.
+ *     F_complete_not_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached.
+ *     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_is_combining_joiner().
+ *     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().
+ *
+ * @see f_utf_is_combining_joiner()
+ * @see f_utf_is_control()
+ * @see f_utf_is_whitespace()
+ * @see f_utf_is_zero_width()
+ *
+ * @see f_fss_skip_past_space()
+ * @see f_fss_skip_past_space_previous()
+ */
+#if !defined(_di_f_fss_skip_past_space_) || !defined(_di_f_fss_skip_past_space_previous_)
+  extern 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) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_fss_skip_past_space_) || !defined(_di_f_fss_skip_past_space_previous_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _PRIVATE_F_fss_h
index ce82302276966c172e5db981f3e8e2b5c7ad1085..9614421a19cbe21424ffeabc472d96c14f4e47d5 100644 (file)
@@ -44,6 +44,7 @@ build_libraries_static-individual -l:libf_memory.a -l:libf_string.a -l:libf_type
 build_sources_headers fss.h fss/common.h fss/item.h fss/named.h fss/nest.h fss/payload.h fss/quote.h fss/set.h fss/set_quote.h fss/simple_packet.h
 
 build_sources_library fss.c fss/common.c fss/item.c fss/named.c fss/nest.c fss/payload.c fss/quote.c fss/set.c fss/set_quote.c fss/simple_packet.c
+build_sources_library private-fss.c
 
 build_sources_library config.c
 
index d1d8651347194922368cd1d9bd1e1d7aaf213f7c..0cb90bfc8fe4809aade13794da753cd58886e938 100644 (file)
@@ -33,6 +33,7 @@ build_libraries-individual -lf_memory -lf_string -lf_type_array -lf_utf
 build_sources_headers fss.h fss/common.h fss/item.h fss/named.h fss/nest.h fss/payload.h fss/quote.h fss/set.h fss/set_quote.h fss/simple_packet.h
 
 build_sources_library fss.c fss/common.c fss/item.c fss/named.c fss/nest.c fss/payload.c fss/quote.c fss/set.c fss/set_quote.c fss/simple_packet.c
+build_sources_library private-fss.c
 build_sources_library ../../tests/unit/c/mock-fss.c
 
 build_static no
index 2a032c55f58cea87584874738456440ddd7a74cc..fb9145026e4dc771ff8fe2375bec4f1f556063d0 100644 (file)
@@ -25,7 +25,7 @@ build_language c
 build_libraries -lc -lcmocka
 build_libraries-individual -lf_memory -lf_string -lf_type_array -lf_utf -lf_fss
 
-build_sources_program test-fss-apply_delimit.c test-fss-apply_delimit_range.c test-fss-count_lines.c test-fss-count_lines_range.c test-fss-fail_utf.c test-fss-fail_utf_to_false.c test-fss-is_combining.c test-fss-is_graph.c test-fss-is_space.c test-fss-is_zero_width.c test-fss-seek_to_eol.c test-fss-skip_past_combining_joiner.c test-fss-skip_past_delimit.c test-fss-skip_past_space.c
+build_sources_program test-fss-apply_delimit.c test-fss-apply_delimit_range.c test-fss-count_lines.c test-fss-count_lines_range.c test-fss-fail_utf.c test-fss-fail_utf_to_false.c test-fss-is_combining.c test-fss-is_graph.c test-fss-is_space.c test-fss-is_zero_width.c test-fss-seek_to_eol.c test-fss-skip_past_combining_joiner.c test-fss-skip_past_delimit.c test-fss-skip_past_space.c test-fss-skip_past_space_previous.c
 build_sources_program test-fss-item_delete.c test-fss-item_destroy.c
 build_sources_program test-fss-items_delete_callback.c test-fss-items_destroy_callback.c test-fss-itemss_delete_callback.c test-fss-itemss_destroy_callback.c
 build_sources_program test-fss-named_delete.c test-fss-named_destroy.c
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_space_previous.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_space_previous.3
new file mode 100644 (file)
index 0000000..82d1687
--- /dev/null
@@ -0,0 +1,97 @@
+.TH f_fss_skip_past_space_previous "3" "January 2026" "FLL - Featureless Linux Library 0.8.2 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_skip_past_space_previous \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_skip_past_space_previous\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Skip past all white space, control characters, and zero-width characters, except newline '
+.PP
+' (U+000A), exposing the previous position to the caller.
+.PP
+If the first character in the given range is a combining character, then this will not skip past anything. This is because combining characters apply from right to left.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used. F_okay_eol on success and EOL was reached. F_okay_eos on success and EOS was reached. F_okay_stop on success and stop point was reached.
+.PP
+F_complete_not_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS. F_complete_not_utf_start (with error bit) if the first character is a combining character. F_complete_not_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). 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().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start and stop positions in the buffer being processed. This increments range->start.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space_previous\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_control()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_zero_width()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_control()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_zero_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/tests/unit/c/test-fss-skip_past_space_previous.c b/level_0/f_fss/tests/unit/c/test-fss-skip_past_space_previous.c
new file mode 100644 (file)
index 0000000..e62531f
--- /dev/null
@@ -0,0 +1,156 @@
+#include "test-fss.h"
+#include "test-fss-skip_past_space_previous.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void test__f_fss_skip_past_space_previous__parameter_checking(void **state) {
+
+  const f_string_static_t test = macro_f_string_static_t_initialize_1("test", 4, 0);
+  f_state_t state_data = f_state_t_initialize;
+
+  {
+    f_fss_skip_past_space_previous(test, 0, &state_data, 0);
+
+    assert_int_equal(state_data.status, F_status_set_error(F_parameter));
+  }
+
+  {
+    f_number_unsigned_t previous = 0;
+
+    f_fss_skip_past_space_previous(test, 0, &state_data, &previous);
+
+    assert_int_equal(state_data.status, F_status_set_error(F_parameter));
+  }
+
+  {
+    f_range_t range = f_range_t_initialize;
+
+    f_fss_skip_past_space_previous(test, &range, &state_data, 0);
+
+    assert_int_equal(state_data.status, F_status_set_error(F_parameter));
+  }
+}
+
+void test__f_fss_skip_past_space_previous__returns_data_not(void **state) {
+
+  const f_string_static_t test = macro_f_string_static_t_initialize_1("test", 4, 0);
+  f_state_t state_data = f_state_t_initialize;
+  f_number_unsigned_t previous = 0;
+
+  {
+    f_range_t range = f_range_t_initialize;
+
+    f_fss_skip_past_space_previous(f_string_empty_s, &range, &state_data, &previous);
+
+    assert_int_equal(state_data.status, F_data_not);
+  }
+
+  {
+    f_range_t range = f_range_t_initialize;
+
+    f_fss_skip_past_space_previous(test, &range, &state_data, &previous);
+
+    assert_int_equal(state_data.status, F_data_not);
+  }
+
+  {
+    f_range_t range = macro_f_range_t_initialize_1(0, test.used - 1);
+
+    f_fss_skip_past_space_previous(f_string_empty_s, &range, &state_data, &previous);
+
+    assert_int_equal(state_data.status, F_data_not);
+  }
+
+  {
+    f_range_t range = macro_f_range_t_initialize_1(test.used, test.used + 2);
+
+    f_fss_skip_past_space_previous(test, &range, &state_data, &previous);
+
+    assert_int_equal(state_data.status, F_data_not);
+  }
+}
+
+void test__f_fss_skip_past_space_previous__works(void **state) {
+
+  f_state_t state_data = f_state_t_initialize;
+
+  // Space followed by a zero-width joiner and a joined character with NULLs before joiner (U+0020 \0 \0 U+200D U+1F9D4).
+  char space_null_join[] = { 0x20, 0x0, 0x0, 0xe2, 0x80, 0x8d, 0xf0, 0x9f, 0xa7, 0x94 };
+
+  f_string_static_t tests[] = {
+    macro_f_string_static_t_initialize_1("test",          4,  0),
+    macro_f_string_static_t_initialize_1(" test",         5,  0),
+    macro_f_string_static_t_initialize_1("   test",       7,  0),
+    macro_f_string_static_t_initialize_1("  \0test  ",    9,  0),
+    macro_f_string_static_t_initialize_1(" \t\atest  ",   9,  0),
+    macro_f_string_static_t_initialize_1("\a\t $test  ",  10, 0),
+    macro_f_string_static_t_initialize_1(" ́test",         7,  0), // Space followed by a combining character (U+0020 U+0301).
+    macro_f_string_static_t_initialize_1("​test",          7,  0), // Starts with zero-width space (U+200B).
+    macro_f_string_static_t_initialize_1(" ‍🧔test",       12, 0), // Space followed by a zero-width joiner and a joined character (U+0020 U+200D U+1F9D4).
+    macro_f_string_static_t_initialize_1(" ⁠test",         8,  0), // Space followed by a word joiner and a joined character (U+0020 U+2060 U+0062).
+    macro_f_string_static_t_initialize_1("́⁠test",          6,  0), // Starts with combining character (U+0301).
+    macro_f_string_static_t_initialize_1("‍́test",          6,  0), // Starts with joiner character (U+2060).
+    macro_f_string_static_t_initialize_1(" ‍\0\0🧔test",   14, 0), // Space followed by a zero-width joiner and a joined character with NULLs after joiner (U+0020 U+200D \0 \0 U+1F9D4).
+    macro_f_string_static_t_initialize_1(space_null_join, 14, 0),
+  };
+
+  uint16_t statuss[] = {
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_okay,
+    F_status_set_error(F_complete_not_utf_start),
+    F_status_set_error(F_complete_not_utf_start),
+    F_okay,
+    F_okay,
+  };
+
+  f_number_unsigned_t ranges[] = {
+    0,
+    1,
+    3,
+    3,
+    3,
+    3,
+    0,
+    3,
+    0,
+    0,
+    0,
+    0,
+    0,
+    0,
+  };
+
+  for (uint8_t i = 0; i < 14; ++i) {
+
+    f_range_t range = macro_f_range_t_initialize_1(0, tests[i].used - 1);
+    f_number_unsigned_t previous = 0;
+
+    f_fss_skip_past_space_previous(tests[i], &range, &state_data, &previous);
+
+    if (state_data.status != statuss[i]) {
+      printf("[ -------> ] --- [00] Expected %u in state.status but got %u at index %d for string '%s'.\n", statuss[i], state_data.status, i, tests[i].used ? tests[i].string : "");
+    }
+
+    assert_int_equal(state_data.status, statuss[i]);
+
+    if (range.start != ranges[i]) {
+      printf("[ -------> ] --- [01] Expected %lu in range.start but got %lu at index %d for string '%s'.\n", ranges[i], range.start, i, tests[i].used ? tests[i].string : "");
+    }
+
+    assert_int_equal(range.start, ranges[i]);
+  } // for
+}
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_fss/tests/unit/c/test-fss-skip_past_space_previous.h b/level_0/f_fss/tests/unit/c/test-fss-skip_past_space_previous.h
new file mode 100644 (file)
index 0000000..db76dce
--- /dev/null
@@ -0,0 +1,34 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: FSS
+ * API Version: 0.8
+ * Licenses: clarified_1_0_or_later-lgpl_2_1_or_later
+ *
+ * Test skip past space previous in the fss project.
+ */
+#ifndef _TEST__F_fss__skip_past_space_previous
+#define _TEST__F_fss__skip_past_space_previous
+
+/**
+ * Test that the function correctly fails on invalid parameter.
+ *
+ * @see f_fss_skip_past_space_previous()
+ */
+extern void test__f_fss_skip_past_space_previous__parameter_checking(void **state);
+
+/**
+ * Test that the function returns F_data_not.
+ *
+ * @see f_fss_skip_past_space_previous()
+ */
+extern void test__f_fss_skip_past_space_previous__returns_data_not(void **state);
+
+/**
+ * Test that the function works.
+ *
+ * @see f_fss_skip_past_space_previous()
+ */
+extern void test__f_fss_skip_past_space_previous__works(void **state);
+
+#endif // _TEST__F_fss__skip_past_space_previous
index 95f7030a9ac9da7734b6fdaf34d743d2cb383bca..823e15ab22388c2e23d9cb4c49f4ab259afd28b3 100644 (file)
@@ -27,6 +27,7 @@ int main(void) {
     cmocka_unit_test(test__f_fss_skip_past_combining_joiner__returns_data_not),
     cmocka_unit_test(test__f_fss_skip_past_delimit__returns_data_not),
     cmocka_unit_test(test__f_fss_skip_past_space__returns_data_not),
+    cmocka_unit_test(test__f_fss_skip_past_space_previous__returns_data_not),
 
     cmocka_unit_test(test__f_fss_apply_delimit__works),
     cmocka_unit_test(test__f_fss_apply_delimit_range__works),
@@ -40,6 +41,7 @@ int main(void) {
     cmocka_unit_test(test__f_fss_skip_past_combining_joiner__works),
     cmocka_unit_test(test__f_fss_skip_past_delimit__works),
     cmocka_unit_test(test__f_fss_skip_past_space__works),
+    cmocka_unit_test(test__f_fss_skip_past_space_previous__works),
 
     cmocka_unit_test(test__f_fss_fail_utf__works_for_error),
     cmocka_unit_test(test__f_fss_fail_utf_to_false__works_for_error),
@@ -157,6 +159,7 @@ int main(void) {
       cmocka_unit_test(test__f_fss_skip_past_combining_joiner__parameter_checking),
       cmocka_unit_test(test__f_fss_skip_past_delimit__parameter_checking),
       cmocka_unit_test(test__f_fss_skip_past_space__parameter_checking),
+      cmocka_unit_test(test__f_fss_skip_past_space_previous__parameter_checking),
 
       cmocka_unit_test(test__f_fss_item_delete__parameter_checking),
       cmocka_unit_test(test__f_fss_item_destroy__parameter_checking),
index c04294430401da34dabe17f696fb6173cae57ce3..451ac6fe531afe8ad0c588bb53415a8768e685b3 100644 (file)
@@ -79,6 +79,7 @@
 #include "test-fss-skip_past_combining_joiner.h"
 #include "test-fss-skip_past_delimit.h"
 #include "test-fss-skip_past_space.h"
+#include "test-fss-skip_past_space_previous.h"
 
 #ifdef __cplusplus
 extern "C" {
index c525c28ff3cb140d6db69965d7825166a4c88268..1c577f682a2e313133594f3e9b8285bc98aef712 100644 (file)
@@ -6,7 +6,7 @@
 extern "C" {
 #endif
 
-#if !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_combining_joiner_) || !defined(_di_f_utf_is_joiner_)
+#if !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_combining_joiner_) || !defined(_di_f_utf_is_joiner_) || !defined( _di_f_utf_is_zero_width_)
   f_status_t private_f_utf_character_is_joiner(const f_utf_char_t sequence) {
 
     if (macro_f_utf_char_t_width_is(sequence) == 3) {
@@ -22,7 +22,7 @@ extern "C" {
 
     return F_false;
   }
-#endif // !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_combining_joiner_) || !defined(_di_f_utf_is_joiner_)
+#endif // !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_combining_joiner_) || !defined(_di_f_utf_is_joiner_) || !defined( _di_f_utf_is_zero_width_)
 
 #ifdef __cplusplus
 } // extern "C"
index f945301d49cd998a0206f07da26f0848c4f9e20c..dabca435f533bbf339e724bcd758246ebb28e136 100644 (file)
@@ -44,10 +44,11 @@ extern "C" {
  * @see f_utf_is_alphabetic_numeric()
  * @see f_utf_is_combining_joiner()
  * @see f_utf_is_joiner()
+ * @see f_utf_is_zero_width()
  */
-#if !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_joiner_)
+#if !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_joiner_) || !defined( _di_f_utf_is_zero_width_)
   extern f_status_t private_f_utf_character_is_joiner(const f_utf_char_t sequence) F_attribute_visibility_internal_d;
-#endif // !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_joiner_)
+#endif // !defined(_di_f_utf_character_is_alphabetic_) || !defined(_di_f_utf_character_is_alphabetic_digit_) || !defined(_di_f_utf_character_is_alphabetic_numeric_) || !defined(_di_f_utf_character_is_combining_joiner_) || !defined(_di_f_utf_character_is_joiner_) || !defined(_di_f_utf_is_alphabetic_) || !defined(_di_f_utf_is_alphabetic_digit_) || !defined(_di_f_utf_is_alphabetic_numeric_) || !defined(_di_f_utf_is_joiner_) || !defined( _di_f_utf_is_zero_width_)
 
 #ifdef __cplusplus
 } // extern "C"
index 4ab5d8dd286db3751b6ae53fefeb59a0baa40e19..6f9e86a733616ddf2ea27a39704e3f1e097a242d 100644 (file)
@@ -123,7 +123,7 @@ extern "C" {
           }
         } // for
 
-        if (F_status_is_error(state->status) || state->status == F_interrupt || range->start >= buffer.used || range->start > range->stop) break;
+        if (F_status_is_error(state->status) || range->start >= buffer.used || range->start > range->stop) break;
 
         // All slashes for an open are delimited (because it could represent a slash in the object name).
         // For example 'object {' = valid open, name 'object', 'object \{' represents 'object {', 'object \\{' = valid open, name 'object \', 'object \\\{' represents 'object \{', etc..
@@ -154,29 +154,13 @@ extern "C" {
 
           position_previous = range->start++;
 
-          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) break;
-            }
+          f_fss_skip_past_space_previous(buffer, range, state, &position_previous);
 
-            if (buffer.string[range->start] == f_fss_eol_s.string[0]) break;
-
-            if (buffer.string[range->start] != f_fss_placeholder_s.string[0]) {
-              if (f_fss_is_space(buffer, *range, state) == F_false) break;
-            }
-
-            position_previous = range->start;
-
-            f_utf_buffer_increment(buffer, range, 1);
-            if (F_status_is_error(state->status)) break;
-          } // while
-
-          if (F_status_is_error(state->status) || state->status == F_interrupt || range->start >= buffer.used || range->start > range->stop) break;
+          if (F_status_is_error(state->status)) break;
+          if (range->start > range->stop || range->start >= buffer.used) break;
 
           // This is a valid object open/close that has been delimited, save the slash delimit positions.
-          if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
+          if (state->status == F_okay_eol) {
             newline_last = range->start;
             line_start = newline_last + 1;
 
@@ -275,33 +259,14 @@ extern "C" {
       else if (buffer.string[range->start] == f_fss_embedded_list_open_s.string[0]) {
         flag_fl &= ~___fl_flag_has_graph_first___;
         before_list_open = position_previous;
-        position_previous = range->start;
+        position_previous = range->start++;
 
         // TODO: needs combining/joiner check.
 
-        state->status = f_utf_buffer_increment(buffer, range, 1);
-        if (F_status_is_error(state->status)) break;
-
-        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) break;
-          }
-
-          if (buffer.string[range->start] == f_fss_eol_s.string[0]) break;
-
-          if (buffer.string[range->start] != f_fss_placeholder_s.string[0]) {
-            if (f_fss_is_space(buffer, *range, state) == F_false) break;
-          }
-
-          position_previous = range->start;
-
-          f_utf_buffer_increment(buffer, range, 1);
-          if (F_status_is_error(state->status)) break;
-        } // while
+        f_fss_skip_past_space_previous(buffer, range, state, &position_previous);
 
-        if (F_status_is_error(state->status) || state->status == F_interrupt || range->start >= buffer.used || range->start > range->stop) break;
+        if (F_status_is_error(state->status)) break;
+        if (range->start > range->stop || range->start >= buffer.used) break;
 
         if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
           if (++depth >= cache->objects->size) {
@@ -373,24 +338,10 @@ extern "C" {
 
         // TODO: needs combining/joiner check.
 
-        while (range->start <= range->stop && range->start < buffer.used) {
+        f_fss_skip_past_space_previous(buffer, range, state, &position_previous);
 
-          if (state->interrupt) {
-            state->interrupt((void *) state, 0);
-            if (F_status_set_fine(state->status) == F_interrupt) break;
-          }
-
-          position_previous = range->start;
-
-          state->status = f_utf_buffer_increment(buffer, range, 1);
-          if (F_status_is_error(state->status) || buffer.string[range->start] == f_fss_eol_s.string[0]) break;
-
-          if (buffer.string[range->start] != f_fss_placeholder_s.string[0]) {
-            if (f_fss_is_space(buffer, *range, state) == F_false || F_status_is_error(state->status)) break;
-          }
-        } // while
-
-        if (F_status_is_error(state->status) || state->status == F_interrupt || range->start >= buffer.used || range->start > range->stop) break;
+        if (F_status_is_error(state->status)) break;
+        if (range->start > range->stop || range->start >= buffer.used) break;
 
         if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
           if (depth >= found->used) {
@@ -510,7 +461,7 @@ extern "C" {
             if (F_status_is_error(state->status)) break;
           } // while
 
-          if (F_status_is_error(state->status) || state->status == F_interrupt) break;
+          if (F_status_is_error(state->status)) break;
         }
       }
       else if (buffer.string[range->start] == f_fss_comment_s.string[0] && (flag_fl & ___fl_flag_has_graph_first___)) {
index f6f3aefbb7cfeeea5731256946f31bb0c1160960..b2b132af52623a6cc5fca7a1f1d3c281bb505def 100644 (file)
@@ -132,7 +132,7 @@ extern "C" {
           if (F_status_is_error(state->status)) break;
           if (range->start > range->stop || range->start >= buffer.used) break;
 
-          if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
+          if (state->status == F_okay_eol) {
             newline_last = range->start;
             line_start = range->start + 1;
 
@@ -186,7 +186,7 @@ extern "C" {
         if (range->start > range->stop || range->start >= buffer.used) break;
 
         // Found a valid content close, set stop point to last newline.
-        if (buffer.string[range->start] == f_fss_eol_s.string[0]) {
+        if (state->status == F_okay_eol) {
           close->start = line_start;
           close->stop = range->start - 1;
 
index 9c0ded726a5300153273174f9131287f70f2f53f..2b9509e0a08b328de34e5f48c2a5292dabf0b3e9 100644 (file)
@@ -25,13 +25,13 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *   The internal.range is modified.
@@ -65,14 +65,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: f_string_dynamic_append().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *   The internal.range is modified.
@@ -109,14 +109,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: f_string_dynamic_append().
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *   The internal.range is modified.
@@ -153,14 +153,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: f_string_dynamic_append().
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *   The internal.range is modified.
index ced9067228d17f10ae3631599956f12cd0167325..ca63323a1877fb46191105ff019896af194b8ab3 100644 (file)
@@ -30,6 +30,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -39,8 +41,6 @@ extern "C" {
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -85,14 +85,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: f_memory_array_increase_by().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -136,14 +136,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: f_memory_array_increase_by().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -187,14 +187,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: f_memory_array_increase_by().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -238,14 +238,14 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: f_memory_array_increase_by().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -293,13 +293,13 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: f_conversion_number_signed_to_string().
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -337,13 +337,13 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
  *     Errors (with error bit) from: f_conversion_number_unsigned_to_string().
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -381,6 +381,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -389,8 +391,6 @@ extern "C" {
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -436,6 +436,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -444,8 +446,6 @@ extern "C" {
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: private_fl_payload_header_map_number_unsigned().
  *     Errors (with error bit) from: private_fl_payload_helper_header_map_destination_write_buffer().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -491,6 +491,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -499,8 +501,6 @@ extern "C" {
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -546,6 +546,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -554,8 +556,6 @@ extern "C" {
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: private_fl_payload_header_map_number_unsigned().
  *     Errors (with error bit) from: private_fl_payload_helper_header_map_destination_write_buffer().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -601,6 +601,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -609,8 +611,6 @@ extern "C" {
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -658,6 +658,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -666,8 +668,6 @@ extern "C" {
  *     Errors (with error bit) from: f_string_dynamic_append_assure().
  *     Errors (with error bit) from: f_string_dynamic_strip_null().
  *     Errors (with error bit) from: private_fl_fss_basic_write().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
@@ -713,6 +713,8 @@ extern "C" {
  * @param state
  *   The state passed directly from the fl_fss_payload_header_map() parameters.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -721,8 +723,6 @@ extern "C" {
  *     Errors (with error bit) from: private_fl_fss_basic_write().
  *     Errors (with error bit) from: private_fl_payload_header_map_number_unsigned().
  *     Errors (with error bit) from: private_fl_payload_helper_header_map_destination_write_buffer().
- *
- *   Must not be NULL.
  * @param internal
  *   The internal state, fl_fss_payload_header_internal_t, created inside of fl_fss_payload_header_map().
  *
index 0077e2677e2b3dd4510dfd0be895d400e9134cc0..480e7ea7851922bb4eee6e07e3444d2e90501e4a 100644 (file)
@@ -99,8 +99,12 @@ extern "C" {
  *   The buffer to seek through.
  * @param range
  *   The start/stop location within the buffer string to process.
+ *
+ *   Must not be NULL.
  * @param destination
  *   The buffer where the bytes are written to.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *   There is no state.handle().
@@ -111,6 +115,8 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
@@ -134,6 +140,8 @@ extern "C" {
  *   The destination.used value before any operations were performed.
  * @param destination
  *   The buffer where the object is written to.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *   There is no state.handle().
@@ -144,6 +152,8 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *
index 87a971ec015c91eddaf6127fc45caf50a84dd0ab..39813228f17358d1ab947a07bcf450f57d96861b 100644 (file)
@@ -33,8 +33,12 @@ extern "C" {
  *   The start location will be updated as the buffer is being processed.
  *   The start location will represent where the read stopped on return.
  *   A start location past the stop location or buffer used means that the entire range was processed.
+ *
+ *   Must not be NULL.
  * @param found
  *   A set of all locations where a valid object was found.
+ *
+ *   Must not be NULL.
  * @param quote
  *   (optional) This will store the quote type representing the character to use (from the f_fss_quote_type_*_e).
  *
@@ -42,6 +46,8 @@ extern "C" {
  * @param delimits
  *   An array of delimits detected during processing.
  *   The caller is expected to decide if and when to process them.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *   There is no state.handle().
@@ -79,6 +85,8 @@ extern "C" {
  *     Errors (with error bit) from: f_utf_buffer_increment().
  *     Errors (with error bit) from: f_utf_is_combining_joiner().
  *
+ *   Must not be NULL.
+ *
  * @see f_memory_array_increase()
  * @see f_memory_array_increase_by()
  * @see f_fss_is_combining_joiner()
@@ -113,13 +121,19 @@ extern "C" {
  *   As Content, this does nothing special in regards to a leading '#'.
  * @param object
  *   The string to write as (does not stop at NULLS, they are ignored and not written).
+ *
+ *   Must not be NULL.
  * @param quote
- *   If 0, then double quotes are auto-inserted, when required.
+ *   If NULL, then double quotes are auto-inserted, when required.
  *   Otherwise, this is quote character to wrap the object in when writing.
  * @param range
  *   The start/stop location within the object string to write as an object.
+ *
+ *   Must not be NULL.
  * @param destination
  *   The buffer where the object is written to.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *   There is no state.handle().
@@ -130,6 +144,8 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *     F_okay_eos on success after reaching the end of the buffer.
@@ -182,6 +198,8 @@ extern "C" {
  *   The destination.used value before any operations were perfomed.
  * @param destination
  *   The buffer where the object is written to.
+ *
+ *   Must not be NULL.
  * @param state
  *   A state for providing flags and handling interrupts during long running operations.
  *   There is no state.handle().
@@ -192,6 +210,8 @@ extern "C" {
  *   Error bit designates an error but must be passed along with F_interrupt.
  *   All other statuses are ignored.
  *
+ *   Must not be NULL.
+ *
  *   This alters state.status:
  *     F_okay on success.
  *