Fix blockquotes - smu - smu - simple markup (Markdown) processor (fork, fixes + features)
 (HTM) git clone git://git.codemadness.org/smu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 23241209f80b4961d706b151d718e1c5b2d5c632
 (DIR) parent 028a8dadd1f61f5b773b773b022ad2ccb86e3ddc
 (HTM) Author: Karl Bartel <karl42@gmail.com>
       Date:   Wed,  2 Oct 2019 22:20:02 +0200
       
       Fix blockquotes
       
       * nesting did not work
       * ">" without following space was not recognized as blockquote
       
       Quoting https://spec.commonmark.org/0.29/#example-5:
       > Normally the > that begins a block quote may be followed optionally by
       a space, which is not considered part of the content.
       
       Diffstat:
         M smu.c                               |      22 ++++++++++++++++------
       
       1 file changed, 16 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/smu.c b/smu.c
       @@ -44,7 +44,7 @@ static int nohtml = 0;
        static Tag lineprefix[] = {
                { "    ",        0,        "<pre><code>", "\n</code></pre>" },
                { "\t",                0,        "<pre><code>", "\n</code></pre>" },
       -        { "> ",                2,        "<blockquote>",        "</blockquote>" },
       +        { ">",                2,        "<blockquote>",        "</blockquote>" },
                { "###### ",        1,        "<h6>",                "</h6>" },
                { "##### ",        1,        "<h5>",                "</h5>" },
                { "#### ",        1,        "<h4>",                "</h4>" },
       @@ -212,12 +212,22 @@ dolineprefix(const char *begin, const char *end, int newblock) {
                        if(!(buffer = malloc(BUFSIZ)))
                                eprint("Malloc failed.");
                        buffer[0] = '\0';
       -                for(j = 0, p += l; p < end; p++, j++) {
       -                        ADDC(buffer, j) = *p;
       -                        if(*p == '\n' && p + l < end) {
       -                                if(strncmp(lineprefix[i].search, p + 1, l) != 0)
       +
       +                /* Collect lines into buffer while they start with the prefix */
       +                j = 0;
       +                while((strncmp(lineprefix[i].search, p, l) == 0) && p + l < end) {
       +                        p += l;
       +
       +                        /* Special case for blockquotes: optional space after > */
       +                        if(lineprefix[i].search[0] == '>' && *p == ' ') {
       +                                p++;
       +                        }
       +
       +                        while(p < end) {
       +                                ADDC(buffer, j) = *p;
       +                                j++;
       +                                if(*(p++) == '\n')
                                                break;
       -                                p += l;
                                }
                        }