slw2gmi

Конвертор из slweb-а у Џемини
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 2e89ed6038a4a22c4af2dcdb3dcb7302142ceb59
родитељ bee0cf82af7a4ee0179b35219710ccc9912730c4
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Mon, 22 Mar 2021 12:37:18 +0100

Added link-prefix variable

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Mslw2gmi.c | 244++++++++++++++++++++++++++++++++++++++-----------------------------------------
измењених датотека: 1, додавања: 118(+), брисања: 126(-)

diff --git a/slw2gmi.c b/slw2gmi.c @@ -925,17 +925,17 @@ process_list_item_start(FILE* output) } int -process_paralinks(FILE* output); +process_paralinks(const uint8_t* link_prefix, FILE* output); int -process_list_item_end(FILE* output) +process_list_item_end(const uint8_t* link_prefix, FILE* output) { if (state & ST_PARA_OPEN) { state &= ~ST_PARA_OPEN; fprintf(output, "\n"); output_colno = 1; - process_paralinks(output); + process_paralinks(link_prefix, output); } return 0; } @@ -1011,12 +1011,12 @@ reverse_alphacompare(const struct dirent** a, const struct dirent** b) } int -process_timestamp(FILE* output, const char* link, uint8_t* permalink_macro, - uint8_t* date, uint8_t* title); +process_timestamp(FILE* output, const uint8_t* link_prefix, const char* link, + uint8_t* permalink_macro, uint8_t* date, uint8_t* title); int -process_incdir_subdir(const char* subdirname, FILE* output, BOOL details_open, - uint8_t* macro_body) +process_incdir_subdir(const char* subdirname, const uint8_t* link_prefix, + FILE* output, BOOL details_open, uint8_t* macro_body) { /* *print_output(output, "%s\n", subdirname); @@ -1128,7 +1128,7 @@ process_incdir_subdir(const char* subdirname, FILE* output, BOOL details_open, uint8_t* title = get_value(vars, vars_count, (uint8_t*)"title", NULL); if (title && date) - process_timestamp(output, link, NULL, date, title); + process_timestamp(output, link_prefix, link, NULL, date, title); /* *print_output(output, "%s%s", link, title); */ @@ -1163,7 +1163,8 @@ process_incdir_subdir(const char* subdirname, FILE* output, BOOL details_open, } int -process_incdir(uint8_t* token, FILE* output, BOOL read_yaml_macros_and_links) +process_incdir(uint8_t* token, const uint8_t* link_prefix, FILE* output, + BOOL read_yaml_macros_and_links) { if (read_yaml_macros_and_links) return 0; @@ -1246,8 +1247,8 @@ process_incdir(uint8_t* token, FILE* output, BOOL read_yaml_macros_and_links) print_output(output, "\n"); while (names_output < num && pnamelist && *pnamelist) { - process_incdir_subdir((*pnamelist)->d_name, output, details_open, - macro_body); + process_incdir_subdir((*pnamelist)->d_name, link_prefix, output, + details_open, macro_body); details_open = FALSE; pnamelist++; names_output++; @@ -1263,8 +1264,11 @@ process_incdir(uint8_t* token, FILE* output, BOOL read_yaml_macros_and_links) return 0; } +BOOL +url_is_local(const char* url); + int -process_timestamp(FILE* output, const char* link, uint8_t* permalink_macro, +process_timestamp(FILE* output, const uint8_t* link_prefix, const char* link, uint8_t* permalink_macro, uint8_t* date, uint8_t* title) { uint8_t* day = NULL; @@ -1309,10 +1313,15 @@ process_timestamp(FILE* output, const char* link, uint8_t* permalink_macro, ptimestamp_format++; } if (title) - print_output(output, "=> %s.gmi\t%s [%s]\n", link, - title, formatted_date); + print_output(output, "=> %s%s.gmi\t%s [%s]\n", + url_is_local(link) && link_prefix + ? (const char*)link_prefix : "", + link, title, formatted_date); else - print_output(output, "=> %s.gmi\t%s\n", link, formatted_date); + print_output(output, "=> %s%s.gmi\t%s\n", + url_is_local(link) && link_prefix + ? (const char*)link_prefix : "", + link, formatted_date); output_colno = 1; } } @@ -1383,8 +1392,8 @@ process_macro(uint8_t* token, FILE* output, BOOL read_yaml_macros_and_links, } int -process_tag(uint8_t* token, FILE* output, BOOL read_yaml_macros_and_links, - BOOL* skip_eol, BOOL end_tag) +process_tag(uint8_t* token, const uint8_t* link_prefix, FILE* output, + BOOL read_yaml_macros_and_links, BOOL* skip_eol, BOOL end_tag) { if (!token || u8_strlen(token) < 1) return warning(1, (uint8_t*)"%s:%ld:%ld: Empty tag name", @@ -1413,7 +1422,7 @@ process_tag(uint8_t* token, FILE* output, BOOL read_yaml_macros_and_links, } else if (startswith((char*)token, "incdir")) /* {incdir} */ { - process_incdir(token, output, read_yaml_macros_and_links); + process_incdir(token, link_prefix, output, read_yaml_macros_and_links); *skip_eol = TRUE; } else if (*token == '=') /* {=macro} */ @@ -1532,10 +1541,11 @@ process_table_end(FILE* output) } BOOL -url_is_local(char* url) +url_is_local(const char* url) { return !(startswith(url, "http://") || startswith(url, "https://") + || startswith(url, "gemini://") || startswith(url, "ftp://") || startswith(url, "ftps://") || startswith(url, "mailto://")); @@ -1647,15 +1657,17 @@ process_image(uint8_t* image_text, uint8_t* image_id, FILE* output, } int -process_paralinks(FILE* output) +process_paralinks(const uint8_t* link_prefix, FILE* output) { KeyValue* pparalink = paralinks; while (pparalink < paralinks + paralinks_count) { if (pparalink->key) { - print_output(output, "%s=> %s\t%s\n", + print_output(output, "%s=> %s%s\t%s\n", output_colno == 1 ? "" : "\n", + url_is_local((const char*)pparalink->key) && link_prefix + ? (const char*)link_prefix : "", pparalink->key, pparalink->value); output_colno = 1; } @@ -1677,9 +1689,10 @@ process_paralinks(FILE* output) } int -process_line_start(uint8_t* line, BOOL first_line_in_doc, - BOOL previous_line_blank, BOOL read_yaml_macros_and_links, - BOOL list_para, FILE* output, uint8_t** token, uint8_t** ptoken) +process_line_start(uint8_t* line, const uint8_t* link_prefix, BOOL + first_line_in_doc, BOOL previous_line_blank, + BOOL read_yaml_macros_and_links, BOOL list_para, FILE* output, + uint8_t** token, uint8_t** ptoken) { if ((first_line_in_doc || previous_line_blank) && !(ANY(state, ST_BLOCKQUOTE | ST_PRE))) @@ -1691,7 +1704,7 @@ process_line_start(uint8_t* line, BOOL first_line_in_doc, state &= ~ST_LIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_end(output); } } @@ -1701,7 +1714,7 @@ process_line_start(uint8_t* line, BOOL first_line_in_doc, state &= ~ST_NUMLIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_numlist_end(output); } } @@ -1712,7 +1725,7 @@ process_line_start(uint8_t* line, BOOL first_line_in_doc, { print_output(output, "\n\n"); output_colno = 1; - process_paralinks(output); + process_paralinks(link_prefix, output); } state &= ~(ST_FOOTNOTE_TEXT | ST_PARA_OPEN); } @@ -1726,19 +1739,18 @@ process_line_start(uint8_t* line, BOOL first_line_in_doc, } int -process_text_token(uint8_t* line, BOOL first_line_in_doc, - BOOL previous_line_blank, - BOOL processed_start_of_line, - BOOL read_yaml_macros_and_links, BOOL list_para, - FILE* output, uint8_t** token, - uint8_t** ptoken, size_t* token_size, - BOOL add_enclosing_paragraph) +process_text_token(uint8_t* line, const uint8_t* link_prefix, + BOOL first_line_in_doc, BOOL previous_line_blank, BOOL + processed_start_of_line, BOOL read_yaml_macros_and_links, + BOOL list_para, FILE* output, uint8_t** token, uint8_t** ptoken, + size_t* token_size, BOOL add_enclosing_paragraph) { if (!(state & ST_YAML)) { if (add_enclosing_paragraph && !processed_start_of_line) - process_line_start(line, first_line_in_doc, previous_line_blank, - read_yaml_macros_and_links, list_para, output, token, ptoken); + process_line_start(line, link_prefix, first_line_in_doc, + previous_line_blank, read_yaml_macros_and_links, list_para, + output, token, ptoken); **ptoken = 0; if (**token && !read_yaml_macros_and_links && !(state & ST_MACRO_BODY)) @@ -1897,7 +1909,7 @@ begin_article(FILE* output, const BOOL add_article_header, } int -end_footnotes(FILE* output, BOOL add_footnote_div) +end_footnotes(FILE* output, const uint8_t* link_prefix, BOOL add_footnote_div) { size_t footnote = 0; @@ -1906,7 +1918,7 @@ end_footnotes(FILE* output, BOOL add_footnote_div) print_output(output, "\n\n"); output_colno = 1; state &= ~ST_PARA_OPEN; - process_paralinks(output); + process_paralinks(link_prefix, output); } process_horizontal_rule(output); @@ -1945,6 +1957,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) uint8_t* var_add_image_links = NULL; uint8_t* var_add_figcaption = NULL; uint8_t* var_add_footnote_div = NULL; + uint8_t* link_prefix = NULL; uint8_t* pbuffer = NULL; uint8_t* line = NULL; uint8_t* pline = NULL; @@ -1997,6 +2010,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) add_figcaption = !(var_add_figcaption && *var_add_figcaption == '0'); var_add_footnote_div = get_value(vars, vars_count, (uint8_t*)"add-footnote-div", NULL); add_footnote_div = var_add_footnote_div && *var_add_footnote_div == '1'; + link_prefix = get_value(vars, vars_count, (uint8_t*)"link-prefix", NULL); CALLOC(line, uint8_t, BUFSIZE) token_size = BUFSIZE; @@ -2088,7 +2102,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_NUMLIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_numlist_end(output); } } @@ -2097,7 +2111,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!(state & ST_LIST)) process_list_start(output); else - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_item_start(output); } @@ -2217,12 +2231,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) else { /* Output existing text up to ` */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; if (!read_yaml_macros_and_links @@ -2258,7 +2270,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_LIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_end(output); } } @@ -2268,7 +2280,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_NUMLIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_numlist_end(output); } } @@ -2316,12 +2328,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) | ST_FOOTNOTE_TEXT | ST_LINK)) { /* Output existing text up to __ */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; if (!read_yaml_macros_and_links @@ -2340,12 +2350,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) | ST_FOOTNOTE_TEXT | ST_LINK)) { /* Output existing text up to _ */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; if (!read_yaml_macros_and_links @@ -2384,7 +2392,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_NUMLIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_numlist_end(output); } } @@ -2393,7 +2401,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!(state & ST_LIST)) process_list_start(output); else - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_item_start(output); } @@ -2432,7 +2440,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (colno == 1 && pline_len > 1 && *(pline+1) == '[') { - process_line_start(line, first_line_in_doc, + process_line_start(line, link_prefix, first_line_in_doc, previous_line_blank, read_yaml_macros_and_links, list_para, output, &token, &ptoken); @@ -2456,7 +2464,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_NUMLIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_numlist_end(output); } } @@ -2465,7 +2473,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!(state & ST_LIST)) process_list_start(output); else - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_item_start(output); } @@ -2484,12 +2492,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) | ST_FOOTNOTE_TEXT | ST_LINK)) { /* Output existing text up to * */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; if (!read_yaml_macros_and_links @@ -2509,12 +2515,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { /* Output existing text up to * */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; if (!read_yaml_macros_and_links @@ -2552,12 +2556,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) && startswith((char*)pline, " ")) { list_para = TRUE; - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; while (*pline == ' ' || *pline == '\t') { @@ -2637,7 +2639,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) else { /* Output existing text up to { */ - process_text_token(line, first_line_in_doc, + process_text_token(line, link_prefix, first_line_in_doc, previous_line_blank, processed_start_of_line, read_yaml_macros_and_links, list_para, output, &token, &ptoken, &token_size, FALSE); @@ -2691,8 +2693,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_TAG; *ptoken = 0; - process_tag(token, output, read_yaml_macros_and_links, - &skip_eol, end_tag); + process_tag(token, link_prefix, output, + read_yaml_macros_and_links, &skip_eol, end_tag); RESET_TOKEN(token, ptoken, token_size) end_tag = FALSE; @@ -2742,12 +2744,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) else { /* Output existing text up to || */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, - &token_size, TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); processed_start_of_line = TRUE; if (!read_yaml_macros_and_links @@ -2976,7 +2976,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { /* Output existing text up to ! */ *ptoken = 0; - process_text_token(line, first_line_in_doc, + process_text_token(line, link_prefix, first_line_in_doc, previous_line_blank, processed_start_of_line, read_yaml_macros_and_links, list_para, output, &token, &ptoken, &token_size, FALSE); @@ -3048,7 +3048,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { print_output(output, "\n\n"); output_colno = 1; - process_paralinks(output); + process_paralinks(link_prefix, output); } state &= ~(ST_FOOTNOTE_TEXT | ST_PARA_OPEN); } @@ -3060,7 +3060,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { /* Output existing text up to [^ */ *ptoken = 0; - process_text_token(line, first_line_in_doc, + process_text_token(line, link_prefix, first_line_in_doc, previous_line_blank, processed_start_of_line, read_yaml_macros_and_links, list_para, output, &token, &ptoken, &token_size, TRUE); @@ -3078,12 +3078,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { /* Output existing text up to [ */ *ptoken = 0; - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, &token_size, - TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); } processed_start_of_line = TRUE; @@ -3356,7 +3354,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { /* Output existing text up to ^[ */ *ptoken = 0; - process_text_token(line, first_line_in_doc, + process_text_token(line, link_prefix, first_line_in_doc, previous_line_blank, processed_start_of_line, read_yaml_macros_and_links, list_para, output, &token, &ptoken, &token_size, TRUE); @@ -3432,12 +3430,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!(state & ST_DISPLAY_FORMULA)) { /* Output existing text up to $$ */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, &token_size, - TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); } processed_start_of_line = TRUE; @@ -3468,12 +3464,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!(state & ST_FORMULA)) { /* Output existing text up to $ */ - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, &token_size, - TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); } processed_start_of_line = TRUE; @@ -3520,7 +3514,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) state &= ~ST_LIST; if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_end(output); } } @@ -3529,7 +3523,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!(state & ST_NUMLIST)) process_numlist_start(output); else - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_item_start(output); } @@ -3672,12 +3666,10 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) } else if (!ANY(state, ST_DISPLAY_FORMULA | ST_FORMULA | ST_IMAGE | ST_LINK)) - process_text_token(line, first_line_in_doc, - previous_line_blank, - processed_start_of_line, - read_yaml_macros_and_links, - list_para, output, &token, &ptoken, &token_size, - TRUE); + process_text_token(line, link_prefix, first_line_in_doc, + previous_line_blank, processed_start_of_line, + read_yaml_macros_and_links, list_para, output, + &token, &ptoken, &token_size, TRUE); } if (!ANY(state, ST_PRE | ST_IMAGE_SECOND_ARG | ST_LINK_SECOND_ARG @@ -3693,7 +3685,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) || previous_line_blank ? "" : "\n"); output_colno = 1; - process_paralinks(output); + process_paralinks(link_prefix, output); } if (state & ST_LIST) skip_eol = TRUE; @@ -3704,7 +3696,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_list_end(output); } state &= ~ST_LIST; @@ -3714,7 +3706,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) { if (!read_yaml_macros_and_links) { - process_list_item_end(output); + process_list_item_end(link_prefix, output); process_numlist_end(output); } state &= ~ST_NUMLIST; @@ -3812,7 +3804,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links) if (!read_yaml_macros_and_links && (footnote_count > 0 || inline_footnote_count > 0)) - end_footnotes(output, add_footnote_div); + end_footnotes(output, link_prefix, add_footnote_div); if (!read_yaml_macros_and_links) {