Fossil SCM

Preserve the case of unknown HTML markup on wiki pages.

drh 2008-05-16 13:55 trunk
Commit a4d7e9162dc506a3b482514c5cbcb7fd075d6326
1 file changed +10 -13
+10 -13
--- src/wikiformat.c
+++ src/wikiformat.c
@@ -599,44 +599,41 @@
599599
**
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){
604
- int i, c;
604
+ int i, j, c;
605605
int iCode;
606
- char *zTag, *zValue;
606
+ char *zValue;
607607
int seen = 0;
608
+ char zTag[100];
608609
609610
if( z[1]=='/' ){
610611
p->endTag = 1;
611612
i = 2;
612613
}else{
613614
p->endTag = 0;
614615
i = 1;
615616
}
616
- zTag = &z[i];
617
+ j = 0;
617618
while( isalnum(z[i]) ){
618
- z[i] = tolower(z[i]);
619
+ if( j<sizeof(zTag)-1 ) zTag[j++] = tolower(z[i]);
619620
i++;
620621
}
621
- c = z[i];
622
- z[i] = 0;
622
+ zTag[j] = 0;
623623
p->iCode = findTag(zTag);
624624
p->iType = aMarkup[p->iCode].iType;
625625
p->nAttr = 0;
626
- z[i] = c;
627626
while( isspace(z[i]) ){ i++; }
628627
while( p->nAttr<8 && isalpha(z[i]) ){
629
- zTag = &z[i];
628
+ j = 0;
630629
while( isalnum(z[i]) ){
631
- z[i] = tolower(z[i]);
630
+ if( j<sizeof(zTag)-1 ) zTag[j++] = tolower(z[i]);
632631
i++;
633632
}
634
- c = z[i];
635
- z[i] = 0;
633
+ zTag[j] = 0;
636634
p->aAttr[p->nAttr].iCode = iCode = findAttr(zTag);
637
- z[i] = c;
638635
while( isspace(z[i]) ){ z++; }
639636
if( z[i]!='=' ){
640637
p->aAttr[p->nAttr].zValue = 0;
641638
p->aAttr[p->nAttr].cTerm = 0;
642639
c = 0;
@@ -658,12 +655,12 @@
658655
}
659656
if( iCode!=0 && (seen & aAttribute[iCode].iMask)==0 ){
660657
seen |= aAttribute[iCode].iMask;
661658
p->nAttr++;
662659
}
663
- if( c=='>' ) break;
664660
while( isspace(z[i]) ){ i++; }
661
+ if( z[i]=='>' || (z[i]=='/' && z[i+1]=='>') ) break;
665662
}
666663
}
667664
668665
/*
669666
** Render markup on the given blob.
670667
--- 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

Keyboard Shortcuts

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