slweb

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

чување 401a550ec9451f0ad3d2f75c67dacbcf9c39b133
родитељ 796d1677fd8cb169387d75d0a5a74dd2b1480cc0
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Tue, 10 Aug 2021 09:19:31 +0200

Distinguish between [(Some text)][somelink] and [Some (text)][somelink]

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

Diffstat:
MTODO | 2+-
Mindex.html | 2+-
Mslweb.c | 72++++++++++++++++++++++++++++++++----------------------------------------
измењених датотека: 3, додавања: 34(+), брисања: 42(-)

diff --git a/TODO b/TODO @@ -5,7 +5,7 @@ [x] Add ~~ -> &nbsp; - [ ] Distinguish between [(Some text)][somelink] and + [x] Distinguish between [(Some text)][somelink] and [Some (text)][somelink] - the latter should not output <span></span>, just retain the parentheses instead diff --git a/index.html b/index.html @@ -153,7 +153,7 @@ this program. If not, see &lt;<a href="https://www.gnu.org/licenses">https://www <div id="git-log"> Previous commit: -index.slw 0e0f560 2021-08-09 21:54:48 +0200 (Страхиња Радић) (HEAD -> master, origin/master, origin/HEAD) +index.slw 796d167 2021-08-10 09:16:12 +0200 (Страхиња Радић) (HEAD -> master) </div><!--git-log--> diff --git a/slweb.c b/slweb.c @@ -2377,17 +2377,17 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only, if (ANY(state, ST_INLINE_FOOTNOTE | ST_HEADING | ST_FOOTNOTE_TEXT | ST_LINK)) { - uint8_t* tag = (uint8_t*)"&nbsp;"; - size_t tag_len = u8_strlen(tag); + uint8_t* entity = (uint8_t*)"&nbsp;"; + size_t entity_len = u8_strlen(entity); size_t token_len = 0; *ptoken = 0; token_len = u8_strlen(token); - if (token_len + tag_len < BUFSIZE) + if (token_len + entity_len < BUFSIZE) { - u8_strncat(token, tag, BUFSIZE-token_len-1); - ptoken += tag_len; + u8_strncat(token, entity, BUFSIZE-token_len-1); + ptoken += entity_len; } } else @@ -3385,7 +3385,6 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only, colno += 2; break; } - if (*token) { /* Output existing text up to [ */ @@ -3403,16 +3402,9 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only, *link_macro = 0; pline++; colno++; - break; - case '(': - if (ANY(state, ST_CODE | ST_DISPLAY_FORMULA | ST_FORMULA - | ST_FOOTNOTE_TEXT | ST_HEADING - | ST_INLINE_FOOTNOTE | ST_LINK_SECOND_ARG_END - | ST_MACRO_BODY | ST_PRE)) - CHECKCOPY(token, ptoken, token_size, pline) - else if (state & ST_LINK) - { + if (*pline == '(') + { uint8_t* tag = (uint8_t*)"<span>"; size_t tag_len = u8_strlen(tag); size_t token_len = 0; @@ -3428,10 +3420,9 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only, state |= ST_LINK_SPAN; pline++; - } - else - CHECKCOPY(token, ptoken, token_size, pline) - colno++; + colno++; + } + break; case ')': @@ -3443,27 +3434,28 @@ slweb_parse(uint8_t* buffer, FILE* output, BOOL body_only, break; } - if (state & ST_LINK_SPAN) - { - if (u8_strlen(pline) > 1 - && *(pline+1) == ']') - { - uint8_t* tag = (uint8_t*)"</span>"; - size_t tag_len = u8_strlen(tag); - size_t token_len = 0; - - *ptoken = 0; - token_len = u8_strlen(token); - - if (token_len + tag_len + 1 < BUFSIZE) - { - u8_strncat(token, tag, BUFSIZE-token_len-1); - ptoken += tag_len; - } - state &= ~ST_LINK_SPAN; - } - pline++; - } + pline_len = u8_strlen(pline); + + if (state & ST_LINK_SPAN && pline_len > 1 + && *(pline+1) == ']') + { + uint8_t* tag = (uint8_t*)"</span>"; + size_t tag_len = u8_strlen(tag); + size_t token_len = 0; + + *ptoken = 0; + token_len = u8_strlen(token); + + if (token_len + tag_len + 1 < BUFSIZE) + { + u8_strncat(token, tag, BUFSIZE-token_len-1); + ptoken += tag_len; + } + state &= ~ST_LINK_SPAN; + /*pline += 2;*/ + pline++; + colno++; + } else if (ANY(state, ST_LINK_SECOND_ARG | ST_IMAGE_SECOND_ARG)) { *ptoken = 0;