slweb

Једноставни генератор статичких веб страна
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 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:
Mdefs.h | 65+++++++++++++++++++++++++++++++++--------------------------------
Mindex.html | 2+-
Mslweb.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 &lt;<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);