Update markdown 'library'.

This commit is contained in:
Michael R Sweet
2025-10-15 15:03:07 -04:00
parent ed8be1f378
commit 8459d97ff3

View File

@@ -3,7 +3,7 @@
// //
// https://www.msweet.org/mmd // https://www.msweet.org/mmd
// //
// Copyright © 2017-2024 by Michael R Sweet. // Copyright © 2017-2025 by Michael R Sweet.
// //
// Licensed under Apache License v2.0. See the file "LICENSE" for more // Licensed under Apache License v2.0. See the file "LICENSE" for more
// information. // information.
@@ -166,7 +166,7 @@ mmdCopyAllText(mmd_t *node) // I - Parent node
char *all = NULL, // String buffer char *all = NULL, // String buffer
*allptr = NULL, // Pointer into string buffer *allptr = NULL, // Pointer into string buffer
*temp; // Temporary pointer *temp; // Temporary pointer
size_t allsize = 1, // Size of "all" buffer size_t allsize = 0, // Size of "all" buffer
textlen; // Length of "text" string textlen; // Length of "text" string
mmd_t *current, // Current node mmd_t *current, // Current node
*next; // Next node *next; // Next node
@@ -179,6 +179,8 @@ mmdCopyAllText(mmd_t *node) // I - Parent node
if (current->text) if (current->text)
{ {
// Append this node's text to the string... // Append this node's text to the string...
long alloff = allptr - all; // Offset within current buffer
textlen = strlen(current->text); textlen = strlen(current->text);
allsize += textlen + (size_t)current->whitespace; allsize += textlen + (size_t)current->whitespace;
temp = realloc(all, allsize); temp = realloc(all, allsize);
@@ -189,8 +191,8 @@ mmdCopyAllText(mmd_t *node) // I - Parent node
return (NULL); return (NULL);
} }
allptr = temp + (allptr - all);
all = temp; all = temp;
allptr = all + alloff;
if (current->whitespace) if (current->whitespace)
*allptr++ = ' '; *allptr++ = ' ';
@@ -1059,6 +1061,8 @@ mmdLoadIO(mmd_t *root, // I - Root node for document or `NULL` for a new d
break; break;
else if (line[0] == '>' && *ptr == '>') else if (line[0] == '>' && *ptr == '>')
memmove(ptr, ptr + 1, strlen(ptr)); memmove(ptr, ptr + 1, strlen(ptr));
DEBUG2_printf(" line=\"%s\"\n", line);
} }
mmd_parse_inline(&doc, block, lineptr); mmd_parse_inline(&doc, block, lineptr);
@@ -1493,7 +1497,7 @@ mmd_parse_inline(_mmd_doc_t *doc, // I - Document
for (text = NULL, type = MMD_TYPE_NORMAL_TEXT; *lineptr; lineptr ++) for (text = NULL, type = MMD_TYPE_NORMAL_TEXT; *lineptr; lineptr ++)
{ {
DEBUG2_printf("mmd_parse_inline: lineptr=%p(\"%32.32s...\"), type=%d, text=%p, whitespace=%d\n", lineptr, lineptr, type, text, whitespace); DEBUG2_printf("mmd_parse_inline: lineptr=%p(\"%s\"), type=%d, text=%p, whitespace=%d\n", lineptr, lineptr, type, text, whitespace);
if (isspace(*lineptr & 255) && type != MMD_TYPE_CODE_TEXT) if (isspace(*lineptr & 255) && type != MMD_TYPE_CODE_TEXT)
{ {
@@ -2090,6 +2094,8 @@ mmd_read_buffer(_mmd_filebuf_t *file) // I - File buffer
if (file->bufptr && file->bufptr > file->buffer) if (file->bufptr && file->bufptr > file->buffer)
{ {
// Discard previous characters in the buffer. // Discard previous characters in the buffer.
DEBUG2_printf("mmd_read_buffer: before buffer=\"%s\"\n", file->bufptr);
memmove(file->buffer, file->bufptr, file->bufend - file->bufptr); memmove(file->buffer, file->bufptr, file->bufend - file->bufptr);
file->bufend -= (file->bufptr - file->buffer); file->bufend -= (file->bufptr - file->buffer);
} }
@@ -2099,11 +2105,13 @@ mmd_read_buffer(_mmd_filebuf_t *file) // I - File buffer
file->bufend = file->buffer; file->bufend = file->buffer;
} }
if ((bytes = (file->cb)(file->cbdata, file->bufend, sizeof(file->buffer) - (size_t)(file->bufend - file->buffer - 1))) > 0) if ((bytes = (file->cb)(file->cbdata, file->bufend, sizeof(file->buffer) - (size_t)(file->bufend - file->buffer) - 1)) > 0)
file->bufend += bytes; file->bufend += bytes;
*(file->bufend) = '\0'; *(file->bufend) = '\0';
file->bufptr = file->buffer; file->bufptr = file->buffer;
DEBUG2_printf("mmd_read_buffer: after buffer=\"%s\"\n", file->buffer);
} }
@@ -2161,6 +2169,8 @@ mmd_read_line(_mmd_filebuf_t *file, // I - File buffer
else if (!strchr(file->bufptr, '\n')) else if (!strchr(file->bufptr, '\n'))
mmd_read_buffer(file); mmd_read_buffer(file);
DEBUG2_printf("mmd_read_line: Returning \"%s\"\n", line);
return (line); return (line);
} }