[LTP] [PATCH 6/9] metaparse: Add missing blank line on the list

Petr Vorel
2024-01-04T20:46:45Z

Correct list in JSON for correct HTML/PDFformatting via asciidoctor
requires extra space:

* My CORRECT list (with extra blank line before first item):
*
* * foo2
* * bar2

But people often forget to add it:

* My BROKEN list (missing blank line before first item):
* * foo
* * bar

Therefore add this blank line to fix doc formatting.

Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
metadata/data_storage.h | 36 +++++++++++++++++++++++++++++++++++-
1 file changed, 35 insertions(+), 1 deletion(-)

diff --git a/metadata/data_storage.h b/metadata/data_storage.h
index 91ea70a02..0f4d42a13 100644
--- a/metadata/data_storage.h
+++ b/metadata/data_storage.h
@@ -7,9 +7,10 @@
#define DATA_STORAGE_H__

#include <stdarg.h>
+#include <stdbool.h>
#include <stdio.h>
-#include <string.h>
#include <stdlib.h>
+#include <string.h>

enum data_type {
DATA_ARRAY,
@@ -275,6 +276,29 @@ static inline void data_node_print_(struct data_node *self, unsigned int padd)
}
}

+static inline bool item_is_str_list_member(struct data_node *self)
+{
+ if (self->type != DATA_STRING)
+ return false;
+
+ return self->string.val[0] == '*' && self->string.val[1] == ' ';
+}
+
+static inline bool item_is_str_empty(struct data_node *self)
+{
+ if (self->type != DATA_STRING)
+ return false;
+
+ return !strlen(self->string.val);
+}
+
+static inline bool missing_space_for_list(struct data_node *cur, struct
+ data_node *prev)
+{
+ return item_is_str_list_member(cur) && !item_is_str_empty(prev) &&
+ !item_is_str_list_member(prev);
+}
+
static inline void data_node_print(struct data_node *self)
{
printf("{\n");
@@ -357,6 +381,16 @@ static inline void data_to_json_(struct data_node *self, FILE *f, unsigned int p
case DATA_ARRAY:
data_fprintf(f, do_padd ? padd : 0, "[\n");
for (i = 0; i < self->array.array_used; i++) {
+
+ if (i > 0 &&
+ missing_space_for_list(self->array.array[i],
+ self->array.array[i-1])) {
+ fprintf(stderr,
+ "%s:%d: WARNING: missing blank line before first list item, add it\n",
+ __FILE__, __LINE__);
+ data_fprintf(f, padd+1, "\"\",\n");
+ }
+
data_to_json_(self->array.array[i], f, padd+1, 1);
if (i < self->array.array_used - 1)
fprintf(f, ",\n");
--
2.43.0