чување 383adb0e3d58423c7e24aa0733920f9088f04417
родитељ 3f1b48893dc479c11b4d2777647f962874e68a53
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Mon, 22 Mar 2021 20:34:28 +0100
Various fixes
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | slw2gmi.c | | | 174 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- |
измењених датотека: 1, додавања: 119(+), брисања: 55(-)
diff --git a/slw2gmi.c b/slw2gmi.c
@@ -412,7 +412,8 @@ read_csv(FILE* output, const char* filename, csv_callback_t callback);
int
process_heading_start(FILE* output, UBYTE heading_level)
{
- print_output(output, "\n");
+ if (!output_firstcol)
+ print_output(output, "\n");
for (size_t i = 0; i < heading_level; i++)
print_output(output, "#");
print_output(output, " ");
@@ -426,7 +427,7 @@ process_heading(const uint8_t* token, FILE* output)
if (!token || u8_strlen(token) < 1)
warning(1, (uint8_t*)"Empty heading");
- print_output(output, "%s\n\n", token ? (char*)token : "");
+ print_output(output, "%s\n", token ? (char*)token : "");
output_firstcol = TRUE;
return 0;
@@ -1600,18 +1601,9 @@ process_inline_link(uint8_t* link_text, uint8_t* link_macro_body,
* link_text);
*/
- paralinks_count++;
- if (paralinks_count > 1)
- {
- REALLOCARRAY(paralinks, KeyValue, paralinks_count)
- pparalinks = paralinks + paralinks_count - 1;
- }
- pparalinks->key = u8_strdup(link_url);
- pparalinks->value_size = u8_strlen(link_text)+1;
- pparalinks->value = u8_strdup(link_text);
-
print_output(output, "%s", link_text);
- output_firstcol = FALSE;
+ if (*link_text)
+ output_firstcol = FALSE;
return 0;
}
@@ -1633,20 +1625,9 @@ process_inline_image(uint8_t* image_text, uint8_t* image_url, FILE* output,
* image_url ? (char*)image_url : "",
* image_text);
*/
- paralinks_count++;
- if (paralinks_count > 1)
- {
- REALLOCARRAY(paralinks, KeyValue, paralinks_count)
- pparalinks = paralinks + paralinks_count - 1;
- }
- pparalinks->key = u8_strdup(image_url);
- pparalinks->value_size = u8_strlen(image_text)+1;
- pparalinks->value = u8_strdup(image_text);
-
print_output(output, "%s ", image_text);
- if (!*image_text)
+ if (*image_text)
output_firstcol = FALSE;
-
return 0;
}
@@ -1677,7 +1658,10 @@ process_paralinks(const uint8_t* link_prefix, FILE* output)
pparalink++;
}
if (paralinks_count > 0)
+ {
print_output(output, "\n");
+ output_firstcol = TRUE;
+ }
free_keyvalue(¶links, paralinks_count);
free(paralinks);
@@ -1735,6 +1719,10 @@ process_line_start(uint8_t* line, const uint8_t* link_prefix,
}
if (!ANY(state, ST_TABLE | ST_TABLE_HEADER | ST_TABLE_LINE))
{
+ if (!read_yaml_macros_and_links)
+ print_output(output, "%s",
+ output_firstcol && !previous_line_blank ? "" : "\n");
+ output_firstcol = TRUE;
state |= ST_PARA_OPEN;
}
}
@@ -1836,7 +1824,9 @@ process_horizontal_rule(FILE* output)
/* Temporarily break paragraph as hr is para-level */
if (state & ST_PARA_OPEN)
print_output(output, "\n\n");
- print_output(output, "————————————————————\n\n");
+ print_output(output, "————————————————————\n");
+ if (state & ST_PARA_OPEN)
+ print_output(output, "\n");
output_firstcol = TRUE;
return 0;
}
@@ -2196,11 +2186,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links)
if (!read_yaml_macros_and_links)
{
- if (state & ST_PRE)
- print_output(output, "\n```\n");
- else
- print_output(output, "\n```\n\n");
- output_firstcol = TRUE;
+ print_output(output, "```%s", (state & ST_PRE) ? "" : "\n");
+ output_firstcol = !(state & ST_PRE);
}
/* Skip the rest of the line (language) */
@@ -3170,19 +3157,41 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links)
*ptoken = 0;
if (!read_yaml_macros_and_links)
{
- if (state & ST_LINK_SECOND_ARG)
- process_inline_link(link_text,
- get_value(macros, macros_count,
- link_macro, NULL),
- token, output);
+ paralinks_count++;
+ if (paralinks_count > 1)
+ {
+ REALLOCARRAY(paralinks, KeyValue, paralinks_count)
+ pparalinks = paralinks + paralinks_count - 1;
+ }
+ pparalinks->key = u8_strdup(token);
+ pparalinks->value_size = u8_strlen(link_text)+1;
+ pparalinks->value = u8_strdup(link_text);
+
+ line_len = u8_strlen(line);
+ if (output_firstcol
+ && ((*(line+line_len-1) == ']')
+ || *(line+line_len-1) == ')'))
+ {
+ skip_eol = TRUE;
+ pline = NULL;
+ }
else
- process_inline_image(link_text, token, output,
- add_image_links, add_figcaption);
+ {
+ if (state & ST_LINK_SECOND_ARG)
+ process_inline_link(link_text,
+ get_value(macros, macros_count,
+ link_macro, NULL),
+ token, output);
+ else
+ process_inline_image(link_text, token, output,
+ add_image_links, add_figcaption);
+ }
}
RESET_TOKEN(token, ptoken, token_size)
state &= ~(ST_LINK | ST_LINK_SECOND_ARG
| ST_IMAGE | ST_IMAGE_SECOND_ARG);
- pline++;
+ if (pline)
+ pline++;
}
else
CHECKCOPY(token, ptoken, token_size, pline)
@@ -3246,24 +3255,74 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links)
else if (state & ST_LINK_SECOND_ARG)
{
if (!read_yaml_macros_and_links)
- process_link(link_text,
- get_value(macros, macros_count,
- link_macro, NULL),
- token, output);
+ {
+ uint8_t* url = get_value(links, links_count, token, NULL);
+ paralinks_count++;
+ if (paralinks_count > 1)
+ {
+ REALLOCARRAY(paralinks, KeyValue, paralinks_count)
+ pparalinks = paralinks + paralinks_count - 1;
+ }
+ pparalinks->key = u8_strdup(url);
+ pparalinks->value_size = u8_strlen(link_text)+1;
+ pparalinks->value = u8_strdup(link_text);
+
+ line_len = u8_strlen(line);
+ if (output_firstcol
+ && ((*(line+line_len-1) == ']')
+ || *(line+line_len-1) == ')'))
+ {
+ skip_eol = TRUE;
+ pline = NULL;
+ }
+ else
+ process_link(link_text,
+ get_value(macros, macros_count,
+ link_macro, NULL),
+ token, output);
+ }
RESET_TOKEN(token, ptoken, token_size)
state &= ~(ST_LINK | ST_LINK_SECOND_ARG);
- pline++;
- colno++;
+ if (pline)
+ {
+ pline++;
+ colno++;
+ }
}
else if (state & ST_IMAGE_SECOND_ARG)
{
if (!read_yaml_macros_and_links)
- process_image(link_text, token, output,
- add_image_links, add_figcaption);
+ {
+ uint8_t* url = get_value(links, links_count, token, NULL);
+ paralinks_count++;
+ if (paralinks_count > 1)
+ {
+ REALLOCARRAY(paralinks, KeyValue, paralinks_count)
+ pparalinks = paralinks + paralinks_count - 1;
+ }
+ pparalinks->key = u8_strdup(url);
+ pparalinks->value_size = u8_strlen(link_text)+1;
+ pparalinks->value = u8_strdup(link_text);
+
+ line_len = u8_strlen(line);
+ if (output_firstcol
+ && ((*(line+line_len-1) == ']')
+ || *(line+line_len-1) == ')'))
+ {
+ skip_eol = TRUE;
+ pline = NULL;
+ }
+ else
+ process_image(link_text, token, output,
+ add_image_links, add_figcaption);
+ }
RESET_TOKEN(token, ptoken, token_size)
state &= ~(ST_IMAGE | ST_IMAGE_SECOND_ARG);
- pline++;
- colno++;
+ if (pline)
+ {
+ pline++;
+ colno++;
+ }
}
else if (u8_strlen(pline) > 1)
{
@@ -3682,8 +3741,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links)
if (!read_yaml_macros_and_links)
{
print_output(output, "%s\n",
- (line_len == 0) || output_firstcol
- || previous_line_blank
+ ((line_len == 0) || previous_line_blank)
+ && output_firstcol
? "" : "\n");
output_firstcol = TRUE;
process_paralinks(link_prefix, output);
@@ -3774,13 +3833,14 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links)
}
if (!skip_eol && !keep_token && !read_yaml_macros_and_links
- && line_len > 0
- && !output_firstcol
+ /*&& line_len > 0*/
+ /*&& !output_firstcol*/
&& !ANY(state, ST_YAML | ST_YAML_VAL | ST_LINK_SECOND_ARG
| ST_LINK_SECOND_ARG_END))
{
- print_output(output, "%s", state & ST_PRE ? "\n" : " ");
- output_firstcol = state & ST_PRE;
+ print_output(output, "%s", state & ST_PRE ? "\n"
+ : (output_firstcol ? "" : " "));
+ output_firstcol = (state & ST_PRE) || output_firstcol;
}
if (!keep_token)
@@ -3792,7 +3852,11 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL read_yaml_macros_and_links)
skip_change_first_line_in_doc = FALSE;
if (line_len == 0)
+ {
+ process_paralinks(link_prefix, output);
+ output_firstcol = TRUE;
previous_line_blank = TRUE;
+ }
/* Lasts until the end of line */
state &= ~(ST_YAML_VAL | ST_IMAGE_SECOND_ARG | ST_LINK_SECOND_ARG