чување 2f59c822a95eb8292aca508fa3ba751a9ffa0d57
родитељ fdc3e455a0b78a8343b84f3964f1458226e7d0da
Аутор: Страхиња Радић <contact@strahinja.org>
Датум: Wed, 17 Mar 2021 13:17:35 +0100
Fix: Add separate state for second link argument near the end of input
Signed-off-by: Страхиња Радић <contact@strahinja.org>
Diffstat:
| M | defs.h | | | 65 | +++++++++++++++++++++++++++++++++-------------------------------- |
| M | index.html | | | 2 | +- |
| M | slweb.c | | | 20 | ++++++++++++-------- |
измењених датотека: 3, додавања: 46(+), брисања: 41(-)
diff --git a/defs.h b/defs.h
@@ -93,38 +93,39 @@ typedef int (*csv_callback_t)(FILE* output, uint8_t** csv_header, uint8_t** csv_
#define MAX_HEADING_LEVEL 4
#define MAX_CSV_REGISTERS 9
-#define ST_NONE 0
-#define ST_YAML 1
-#define ST_YAML_VAL (1 << 1)
-#define ST_PARA_OPEN (1 << 2)
-#define ST_TAG (1 << 3)
-#define ST_HEADING (1 << 4)
-#define ST_HEADING_TEXT (1 << 5)
-#define ST_BOLD (1 << 6)
-#define ST_ITALIC (1 << 7)
-#define ST_PRE (1 << 8)
-#define ST_CODE (1 << 9)
-#define ST_BLOCKQUOTE (1 << 10)
-#define ST_LINK (1 << 11)
-#define ST_LINK_SECOND_ARG (1 << 12)
-#define ST_LINK_SPAN (1 << 13)
-#define ST_LINK_MACRO (1 << 14)
-#define ST_IMAGE (1 << 15)
-#define ST_IMAGE_SECOND_ARG (1 << 16)
-#define ST_MACRO_BODY (1 << 17)
-#define ST_CSV_BODY (1 << 18)
-#define ST_HTML_TAG (1 << 19)
-#define ST_KBD (1 << 20)
-#define ST_LIST (1 << 21)
-#define ST_NUMLIST (1 << 22)
-#define ST_FOOTNOTE (1 << 23)
-#define ST_FOOTNOTE_TEXT (1 << 24)
-#define ST_INLINE_FOOTNOTE (1 << 25)
-#define ST_FORMULA (1 << 26)
-#define ST_DISPLAY_FORMULA (1 << 27)
-#define ST_TABLE_HEADER (1 << 28)
-#define ST_TABLE_LINE (1 << 29)
-#define ST_TABLE (1 << 30)
+#define ST_NONE 0
+#define ST_YAML 1
+#define ST_YAML_VAL (1 << 1)
+#define ST_PARA_OPEN (1 << 2)
+#define ST_TAG (1 << 3)
+#define ST_HEADING (1 << 4)
+#define ST_HEADING_TEXT (1 << 5)
+#define ST_BOLD (1 << 6)
+#define ST_ITALIC (1 << 7)
+#define ST_PRE (1 << 8)
+#define ST_CODE (1 << 9)
+#define ST_BLOCKQUOTE (1 << 10)
+#define ST_LINK (1 << 11)
+#define ST_LINK_SECOND_ARG (1 << 12)
+#define ST_LINK_SECOND_ARG_END (1 << 13)
+#define ST_LINK_SPAN (1 << 14)
+#define ST_LINK_MACRO (1 << 15)
+#define ST_IMAGE (1 << 16)
+#define ST_IMAGE_SECOND_ARG (1 << 17)
+#define ST_MACRO_BODY (1 << 18)
+#define ST_CSV_BODY (1 << 19)
+#define ST_HTML_TAG (1 << 20)
+#define ST_KBD (1 << 21)
+#define ST_LIST (1 << 22)
+#define ST_NUMLIST (1 << 23)
+#define ST_FOOTNOTE (1 << 24)
+#define ST_FOOTNOTE_TEXT (1 << 25)
+#define ST_INLINE_FOOTNOTE (1 << 26)
+#define ST_FORMULA (1 << 27)
+#define ST_DISPLAY_FORMULA (1 << 28)
+#define ST_TABLE_HEADER (1 << 29)
+#define ST_TABLE_LINE (1 << 30)
+#define ST_TABLE (1 << 31)
#define ST_CS_NONE 0
#define ST_CS_HEADER 1
diff --git a/index.html b/index.html
@@ -152,7 +152,7 @@ this program. If not, see <<a href="https://www.gnu.org/licenses">https://www
<div id="git-log">
Previous commit:
-index.slw e7ac7d4 2021-03-12 14:22:43 +0100 (Страхиња Радић) (HEAD -> master)
+index.slw fdc3e45 2021-03-17 12:27:59 +0100 (Страхиња Радић) (HEAD -> master, origin/master, origin/HEAD)
</div><!--git-log-->
diff --git a/slweb.c b/slweb.c
@@ -2311,7 +2311,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
case '_':
if (ANY(state, ST_CODE | ST_DISPLAY_FORMULA | ST_FORMULA
| ST_HTML_TAG | ST_IMAGE | ST_LINK_SECOND_ARG
- | ST_MACRO_BODY | ST_PRE | ST_TAG | ST_YAML))
+ | ST_LINK_SECOND_ARG_END | ST_MACRO_BODY | ST_PRE
+ | ST_TAG | ST_YAML))
{
CHECKCOPY(token, ptoken, token_size, pline)
colno++;
@@ -3109,7 +3110,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
case '(':
if (ANY(state, ST_CODE | ST_DISPLAY_FORMULA | ST_FORMULA
| ST_FOOTNOTE_TEXT | ST_HEADING
- | ST_INLINE_FOOTNOTE | ST_LINK_SECOND_ARG
+ | ST_INLINE_FOOTNOTE | ST_LINK_SECOND_ARG_END
| ST_MACRO_BODY | ST_PRE))
CHECKCOPY(token, ptoken, token_size, pline)
else if (state & ST_LINK)
@@ -3137,7 +3138,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
case ')':
if (ANY(state, ST_DISPLAY_FORMULA | ST_FORMULA
- | ST_LINK_SECOND_ARG))
+ | ST_LINK_SECOND_ARG_END))
{
CHECKCOPY(token, ptoken, token_size, pline)
colno++;
@@ -3280,7 +3281,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
}
RESET_TOKEN(token, ptoken, token_size)
keep_token = FALSE;
- state |= ST_LINK_SECOND_ARG;
+ state |= ST_LINK_SECOND_ARG_END;
break;
case '[':
@@ -3609,7 +3610,7 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
}
}
}
- else if (state & ST_LINK_SECOND_ARG)
+ else if (ANY(state, ST_LINK_SECOND_ARG | ST_LINK_SECOND_ARG_END))
{
if (read_yaml_macros_and_links)
{
@@ -3637,7 +3638,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
TRUE);
}
- if (!ANY(state, ST_PRE | ST_IMAGE_SECOND_ARG | ST_LINK_SECOND_ARG)
+ if (!ANY(state, ST_PRE | ST_IMAGE_SECOND_ARG | ST_LINK_SECOND_ARG
+ | ST_LINK_SECOND_ARG_END)
&& (!*pbuffer || *pbuffer == '\n'))
{
if (state & ST_PARA_OPEN)
@@ -3730,7 +3732,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
}
if (!skip_eol && !keep_token && !read_yaml_macros_and_links
- && !ANY(state, ST_YAML | ST_YAML_VAL | ST_LINK_SECOND_ARG))
+ && !ANY(state, ST_YAML | ST_YAML_VAL | ST_LINK_SECOND_ARG
+ | ST_LINK_SECOND_ARG_END))
print_output(output, "\n");
if (!keep_token)
@@ -3745,7 +3748,8 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only,
previous_line_blank = TRUE;
/* Lasts until the end of line */
- state &= ~(ST_YAML_VAL | ST_IMAGE_SECOND_ARG | ST_LINK_SECOND_ARG);
+ state &= ~(ST_YAML_VAL | ST_IMAGE_SECOND_ARG | ST_LINK_SECOND_ARG
+ | ST_LINK_SECOND_ARG_END);
}
while (pbuffer && *pbuffer);