чување 90d006dfdc6c499479adf904c95bb3e0dea57246
родитељ 26a4ae3d0e236c4ea56d1392956b6043d8939183
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Fri, 7 Apr 2023 23:07:50 +0200
slweb.c: Fix lists not closing at the end of file (add explicit process_line_start when processing links; examples/lists: New example
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
измењених датотека: 3, додавања: 50(+), брисања: 23(-)
diff --git a/examples/lists/all.do b/examples/lists/all.do
@@ -0,0 +1 @@
+redo-ifchange index.html
diff --git a/examples/lists/index.slw b/examples/lists/index.slw
@@ -0,0 +1,17 @@
+1. Apples
+2. Oranges
+3. Bananas
+4. Pineapples
+5. Pears
+6. Plums
+7. Peaches
+8. Grapes 123. item stability test
+9. Lions
+10. Tigers
+11. Bears
+
+```
+1. Oh
+2. my
+3. !
+```
diff --git a/slweb.c b/slweb.c
@@ -2239,7 +2239,8 @@ process_image(FILE* output, const u8* image_text, const u8* image_file_prefix,
int
process_line_start(FILE* output, const u8* line, const u8* link_prefix,
const int first_line_in_doc, const int previous_line_blank,
- const int read_yaml_macros_and_links, const int list_para)
+ const int read_yaml_macros_and_links, const int list_para,
+ const int new_para_ok)
{
if ((first_line_in_doc || previous_line_blank)
&& !(ANY(state, ST_BLOCKQUOTE | ST_PRE)))
@@ -2277,7 +2278,9 @@ process_line_start(FILE* output, const u8* line, const u8* link_prefix,
state &= ~(ST_FOOTNOTE_TEXT | ST_PARA_OPEN);
}
}
- if (!ANY(state, ST_TABLE | ST_TABLE_HEADER | ST_TABLE_LINE))
+ if (new_para_ok
+ && !ANY(state,
+ ST_TABLE | ST_TABLE_HEADER | ST_TABLE_LINE))
{
if (!read_yaml_macros_and_links)
{
@@ -2295,14 +2298,15 @@ process_text_token(FILE* output, const u8* line, const u8* link_prefix,
const int first_line_in_doc, const int previous_line_blank,
const int processed_start_of_line, const int read_yaml_macros_and_links,
const int list_para, u8** token, u8** ptoken, size_t* token_size,
- const int add_enclosing_paragraph)
+ const int add_enclosing_paragraph, const int new_para_ok)
{
if (!(IN(state, ST_YAML)))
{
if (add_enclosing_paragraph && !processed_start_of_line)
process_line_start(output, line, link_prefix,
first_line_in_doc, previous_line_blank,
- read_yaml_macros_and_links, list_para);
+ read_yaml_macros_and_links, list_para,
+ new_para_ok);
**ptoken = 0;
if (**token && !read_yaml_macros_and_links
&& !(IN(state, ST_MACRO_BODY)))
@@ -2992,7 +2996,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3032,7 +3036,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3073,7 +3077,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3145,7 +3149,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3251,7 +3255,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3293,7 +3297,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3373,7 +3377,7 @@ do_line:
{
process_line_start(output, line, link_prefix,
first_line_in_doc, previous_line_blank,
- read_yaml_macros_and_links, list_para);
+ read_yaml_macros_and_links, list_para, 1);
/* Ignore abbreviations (for now) */
pline = NULL;
@@ -3445,7 +3449,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3488,7 +3492,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -3537,7 +3541,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para, &token,
- &ptoken, &token_size, 1);
+ &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
while (*pline == ' ' || *pline == '\t')
{
@@ -3628,7 +3632,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para, &token,
- &ptoken, &token_size, 0);
+ &ptoken, &token_size, 0, 1);
processed_start_of_line = 1;
}
@@ -3760,7 +3764,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
if (!read_yaml_macros_and_links
@@ -4016,7 +4020,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para, &token,
- &ptoken, &token_size, 0);
+ &ptoken, &token_size, 0, 1);
processed_start_of_line = 1;
RESET_TOKEN(token, ptoken, token_size);
@@ -4092,7 +4096,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
}
processed_start_of_line = 1;
@@ -4111,7 +4115,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para, &token,
- &ptoken, &token_size, 1);
+ &ptoken, &token_size, 1, 1);
}
processed_start_of_line = 1;
@@ -4312,6 +4316,11 @@ do_line:
switch (*(pline + 1))
{
case ':':
+ process_line_start(output, line, link_prefix,
+ first_line_in_doc, previous_line_blank,
+ read_yaml_macros_and_links, list_para,
+ 0);
+
links_count++;
if (!links)
@@ -4399,7 +4408,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para, &token,
- &ptoken, &token_size, 1);
+ &ptoken, &token_size, 1, 1);
processed_start_of_line = 1;
RESET_TOKEN(token, ptoken, token_size);
@@ -4466,7 +4475,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
}
processed_start_of_line = 1;
@@ -4502,7 +4511,7 @@ do_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
}
processed_start_of_line = 1;
@@ -4779,7 +4788,7 @@ done_line:
first_line_in_doc, previous_line_blank,
processed_start_of_line,
read_yaml_macros_and_links, list_para,
- &token, &ptoken, &token_size, 1);
+ &token, &ptoken, &token_size, 1, 1);
}
if (!ANY(state,