Fossil SCM
Fix bugs in the rendering of HTML markup with multiple attributes. This clears up a problem in displaying the "concepts.wiki" documentation file.
Commit
1bbc5b7e6cb0e64e632927b2c9803884f3445a58
Parent
f94f7e5f49b8ca4…
1 file changed
+5
-3
+5
-3
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -600,10 +600,11 @@ | ||
| 600 | 600 | ** The content of z[] might be modified by converting characters |
| 601 | 601 | ** to lowercase and by inserting some "\000" characters. |
| 602 | 602 | */ |
| 603 | 603 | static void parseMarkup(ParsedMarkup *p, char *z){ |
| 604 | 604 | int i, c; |
| 605 | + int iCode; | |
| 605 | 606 | char *zTag, *zValue; |
| 606 | 607 | int seen = 0; |
| 607 | 608 | |
| 608 | 609 | if( z[1]=='/' ){ |
| 609 | 610 | p->endTag = 1; |
| @@ -630,11 +631,11 @@ | ||
| 630 | 631 | z[i] = tolower(z[i]); |
| 631 | 632 | i++; |
| 632 | 633 | } |
| 633 | 634 | c = z[i]; |
| 634 | 635 | z[i] = 0; |
| 635 | - p->aAttr[p->nAttr].iCode = findAttr(zTag); | |
| 636 | + p->aAttr[p->nAttr].iCode = iCode = findAttr(zTag); | |
| 636 | 637 | z[i] = c; |
| 637 | 638 | while( isspace(z[i]) ){ z++; } |
| 638 | 639 | if( z[i]!='=' ){ |
| 639 | 640 | p->aAttr[p->nAttr].zValue = 0; |
| 640 | 641 | p->aAttr[p->nAttr].cTerm = 0; |
| @@ -653,15 +654,16 @@ | ||
| 653 | 654 | p->aAttr[p->nAttr].zValue = zValue; |
| 654 | 655 | p->aAttr[p->nAttr].cTerm = c = z[i]; |
| 655 | 656 | z[i] = 0; |
| 656 | 657 | i++; |
| 657 | 658 | } |
| 658 | - if( p->aAttr[p->nAttr].iCode!=0 && (seen & p->aAttr[p->nAttr].iCode)==0 ){ | |
| 659 | - seen |= p->aAttr[p->nAttr].iCode; | |
| 659 | + if( iCode!=0 && (seen & aAttribute[iCode].iMask)==0 ){ | |
| 660 | + seen |= aAttribute[iCode].iMask; | |
| 660 | 661 | p->nAttr++; |
| 661 | 662 | } |
| 662 | 663 | if( c=='>' ) break; |
| 664 | + while( isspace(z[i]) ){ i++; } | |
| 663 | 665 | } |
| 664 | 666 | } |
| 665 | 667 | |
| 666 | 668 | /* |
| 667 | 669 | ** Render markup on the given blob. |
| 668 | 670 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -600,10 +600,11 @@ | |
| 600 | ** The content of z[] might be modified by converting characters |
| 601 | ** to lowercase and by inserting some "\000" characters. |
| 602 | */ |
| 603 | static void parseMarkup(ParsedMarkup *p, char *z){ |
| 604 | int i, c; |
| 605 | char *zTag, *zValue; |
| 606 | int seen = 0; |
| 607 | |
| 608 | if( z[1]=='/' ){ |
| 609 | p->endTag = 1; |
| @@ -630,11 +631,11 @@ | |
| 630 | z[i] = tolower(z[i]); |
| 631 | i++; |
| 632 | } |
| 633 | c = z[i]; |
| 634 | z[i] = 0; |
| 635 | p->aAttr[p->nAttr].iCode = findAttr(zTag); |
| 636 | z[i] = c; |
| 637 | while( isspace(z[i]) ){ z++; } |
| 638 | if( z[i]!='=' ){ |
| 639 | p->aAttr[p->nAttr].zValue = 0; |
| 640 | p->aAttr[p->nAttr].cTerm = 0; |
| @@ -653,15 +654,16 @@ | |
| 653 | p->aAttr[p->nAttr].zValue = zValue; |
| 654 | p->aAttr[p->nAttr].cTerm = c = z[i]; |
| 655 | z[i] = 0; |
| 656 | i++; |
| 657 | } |
| 658 | if( p->aAttr[p->nAttr].iCode!=0 && (seen & p->aAttr[p->nAttr].iCode)==0 ){ |
| 659 | seen |= p->aAttr[p->nAttr].iCode; |
| 660 | p->nAttr++; |
| 661 | } |
| 662 | if( c=='>' ) break; |
| 663 | } |
| 664 | } |
| 665 | |
| 666 | /* |
| 667 | ** Render markup on the given blob. |
| 668 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -600,10 +600,11 @@ | |
| 600 | ** The content of z[] might be modified by converting characters |
| 601 | ** to lowercase and by inserting some "\000" characters. |
| 602 | */ |
| 603 | static void parseMarkup(ParsedMarkup *p, char *z){ |
| 604 | int i, c; |
| 605 | int iCode; |
| 606 | char *zTag, *zValue; |
| 607 | int seen = 0; |
| 608 | |
| 609 | if( z[1]=='/' ){ |
| 610 | p->endTag = 1; |
| @@ -630,11 +631,11 @@ | |
| 631 | z[i] = tolower(z[i]); |
| 632 | i++; |
| 633 | } |
| 634 | c = z[i]; |
| 635 | z[i] = 0; |
| 636 | p->aAttr[p->nAttr].iCode = iCode = findAttr(zTag); |
| 637 | z[i] = c; |
| 638 | while( isspace(z[i]) ){ z++; } |
| 639 | if( z[i]!='=' ){ |
| 640 | p->aAttr[p->nAttr].zValue = 0; |
| 641 | p->aAttr[p->nAttr].cTerm = 0; |
| @@ -653,15 +654,16 @@ | |
| 654 | p->aAttr[p->nAttr].zValue = zValue; |
| 655 | p->aAttr[p->nAttr].cTerm = c = z[i]; |
| 656 | z[i] = 0; |
| 657 | i++; |
| 658 | } |
| 659 | if( iCode!=0 && (seen & aAttribute[iCode].iMask)==0 ){ |
| 660 | seen |= aAttribute[iCode].iMask; |
| 661 | p->nAttr++; |
| 662 | } |
| 663 | if( c=='>' ) break; |
| 664 | while( isspace(z[i]) ){ i++; } |
| 665 | } |
| 666 | } |
| 667 | |
| 668 | /* |
| 669 | ** Render markup on the given blob. |
| 670 |