Fossil SCM
Preserve the case of unknown HTML markup on wiki pages.
Commit
a4d7e9162dc506a3b482514c5cbcb7fd075d6326
Parent
c7c81df13855c9f…
1 file changed
+10
-13
+10
-13
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -599,44 +599,41 @@ | ||
| 599 | 599 | ** |
| 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 | - int i, c; | |
| 604 | + int i, j, c; | |
| 605 | 605 | int iCode; |
| 606 | - char *zTag, *zValue; | |
| 606 | + char *zValue; | |
| 607 | 607 | int seen = 0; |
| 608 | + char zTag[100]; | |
| 608 | 609 | |
| 609 | 610 | if( z[1]=='/' ){ |
| 610 | 611 | p->endTag = 1; |
| 611 | 612 | i = 2; |
| 612 | 613 | }else{ |
| 613 | 614 | p->endTag = 0; |
| 614 | 615 | i = 1; |
| 615 | 616 | } |
| 616 | - zTag = &z[i]; | |
| 617 | + j = 0; | |
| 617 | 618 | while( isalnum(z[i]) ){ |
| 618 | - z[i] = tolower(z[i]); | |
| 619 | + if( j<sizeof(zTag)-1 ) zTag[j++] = tolower(z[i]); | |
| 619 | 620 | i++; |
| 620 | 621 | } |
| 621 | - c = z[i]; | |
| 622 | - z[i] = 0; | |
| 622 | + zTag[j] = 0; | |
| 623 | 623 | p->iCode = findTag(zTag); |
| 624 | 624 | p->iType = aMarkup[p->iCode].iType; |
| 625 | 625 | p->nAttr = 0; |
| 626 | - z[i] = c; | |
| 627 | 626 | while( isspace(z[i]) ){ i++; } |
| 628 | 627 | while( p->nAttr<8 && isalpha(z[i]) ){ |
| 629 | - zTag = &z[i]; | |
| 628 | + j = 0; | |
| 630 | 629 | while( isalnum(z[i]) ){ |
| 631 | - z[i] = tolower(z[i]); | |
| 630 | + if( j<sizeof(zTag)-1 ) zTag[j++] = tolower(z[i]); | |
| 632 | 631 | i++; |
| 633 | 632 | } |
| 634 | - c = z[i]; | |
| 635 | - z[i] = 0; | |
| 633 | + zTag[j] = 0; | |
| 636 | 634 | p->aAttr[p->nAttr].iCode = iCode = findAttr(zTag); |
| 637 | - z[i] = c; | |
| 638 | 635 | while( isspace(z[i]) ){ z++; } |
| 639 | 636 | if( z[i]!='=' ){ |
| 640 | 637 | p->aAttr[p->nAttr].zValue = 0; |
| 641 | 638 | p->aAttr[p->nAttr].cTerm = 0; |
| 642 | 639 | c = 0; |
| @@ -658,12 +655,12 @@ | ||
| 658 | 655 | } |
| 659 | 656 | if( iCode!=0 && (seen & aAttribute[iCode].iMask)==0 ){ |
| 660 | 657 | seen |= aAttribute[iCode].iMask; |
| 661 | 658 | p->nAttr++; |
| 662 | 659 | } |
| 663 | - if( c=='>' ) break; | |
| 664 | 660 | while( isspace(z[i]) ){ i++; } |
| 661 | + if( z[i]=='>' || (z[i]=='/' && z[i+1]=='>') ) break; | |
| 665 | 662 | } |
| 666 | 663 | } |
| 667 | 664 | |
| 668 | 665 | /* |
| 669 | 666 | ** Render markup on the given blob. |
| 670 | 667 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -599,44 +599,41 @@ | |
| 599 | ** |
| 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; |
| 611 | i = 2; |
| 612 | }else{ |
| 613 | p->endTag = 0; |
| 614 | i = 1; |
| 615 | } |
| 616 | zTag = &z[i]; |
| 617 | while( isalnum(z[i]) ){ |
| 618 | z[i] = tolower(z[i]); |
| 619 | i++; |
| 620 | } |
| 621 | c = z[i]; |
| 622 | z[i] = 0; |
| 623 | p->iCode = findTag(zTag); |
| 624 | p->iType = aMarkup[p->iCode].iType; |
| 625 | p->nAttr = 0; |
| 626 | z[i] = c; |
| 627 | while( isspace(z[i]) ){ i++; } |
| 628 | while( p->nAttr<8 && isalpha(z[i]) ){ |
| 629 | zTag = &z[i]; |
| 630 | while( isalnum(z[i]) ){ |
| 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; |
| 642 | c = 0; |
| @@ -658,12 +655,12 @@ | |
| 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 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -599,44 +599,41 @@ | |
| 599 | ** |
| 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, j, c; |
| 605 | int iCode; |
| 606 | char *zValue; |
| 607 | int seen = 0; |
| 608 | char zTag[100]; |
| 609 | |
| 610 | if( z[1]=='/' ){ |
| 611 | p->endTag = 1; |
| 612 | i = 2; |
| 613 | }else{ |
| 614 | p->endTag = 0; |
| 615 | i = 1; |
| 616 | } |
| 617 | j = 0; |
| 618 | while( isalnum(z[i]) ){ |
| 619 | if( j<sizeof(zTag)-1 ) zTag[j++] = tolower(z[i]); |
| 620 | i++; |
| 621 | } |
| 622 | zTag[j] = 0; |
| 623 | p->iCode = findTag(zTag); |
| 624 | p->iType = aMarkup[p->iCode].iType; |
| 625 | p->nAttr = 0; |
| 626 | while( isspace(z[i]) ){ i++; } |
| 627 | while( p->nAttr<8 && isalpha(z[i]) ){ |
| 628 | j = 0; |
| 629 | while( isalnum(z[i]) ){ |
| 630 | if( j<sizeof(zTag)-1 ) zTag[j++] = tolower(z[i]); |
| 631 | i++; |
| 632 | } |
| 633 | zTag[j] = 0; |
| 634 | p->aAttr[p->nAttr].iCode = iCode = findAttr(zTag); |
| 635 | while( isspace(z[i]) ){ z++; } |
| 636 | if( z[i]!='=' ){ |
| 637 | p->aAttr[p->nAttr].zValue = 0; |
| 638 | p->aAttr[p->nAttr].cTerm = 0; |
| 639 | c = 0; |
| @@ -658,12 +655,12 @@ | |
| 655 | } |
| 656 | if( iCode!=0 && (seen & aAttribute[iCode].iMask)==0 ){ |
| 657 | seen |= aAttribute[iCode].iMask; |
| 658 | p->nAttr++; |
| 659 | } |
| 660 | while( isspace(z[i]) ){ i++; } |
| 661 | if( z[i]=='>' || (z[i]=='/' && z[i+1]=='>') ) break; |
| 662 | } |
| 663 | } |
| 664 | |
| 665 | /* |
| 666 | ** Render markup on the given blob. |
| 667 |