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.

drh 2008-05-16 00:56 trunk
Commit 1bbc5b7e6cb0e64e632927b2c9803884f3445a58
1 file changed +5 -3
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -600,10 +600,11 @@
600600
** The content of z[] might be modified by converting characters
601601
** to lowercase and by inserting some "\000" characters.
602602
*/
603603
static void parseMarkup(ParsedMarkup *p, char *z){
604604
int i, c;
605
+ int iCode;
605606
char *zTag, *zValue;
606607
int seen = 0;
607608
608609
if( z[1]=='/' ){
609610
p->endTag = 1;
@@ -630,11 +631,11 @@
630631
z[i] = tolower(z[i]);
631632
i++;
632633
}
633634
c = z[i];
634635
z[i] = 0;
635
- p->aAttr[p->nAttr].iCode = findAttr(zTag);
636
+ p->aAttr[p->nAttr].iCode = iCode = findAttr(zTag);
636637
z[i] = c;
637638
while( isspace(z[i]) ){ z++; }
638639
if( z[i]!='=' ){
639640
p->aAttr[p->nAttr].zValue = 0;
640641
p->aAttr[p->nAttr].cTerm = 0;
@@ -653,15 +654,16 @@
653654
p->aAttr[p->nAttr].zValue = zValue;
654655
p->aAttr[p->nAttr].cTerm = c = z[i];
655656
z[i] = 0;
656657
i++;
657658
}
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;
660661
p->nAttr++;
661662
}
662663
if( c=='>' ) break;
664
+ while( isspace(z[i]) ){ i++; }
663665
}
664666
}
665667
666668
/*
667669
** Render markup on the given blob.
668670
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button