Fossil SCM
Only suppress bad hyperlinks for check-in comments and tickets. Continue to show the broken hyperlinks on wiki pages.
Commit
26ac392308a1273ee9206c2b0d48e65f827aa282
Parent
3c1ad1def951372…
8 files changed
-1
+1
-1
+2
-2
+1
-1
+1
-1
+2
-2
+2
-2
+5
-6
-1
| --- src/descendants.c | ||
| +++ src/descendants.c | ||
| @@ -506,6 +506,5 @@ | ||
| 506 | 506 | db_finalize(&q); |
| 507 | 507 | db_finalize(&ins); |
| 508 | 508 | bag_clear(&seen); |
| 509 | 509 | bag_clear(&pending); |
| 510 | 510 | } |
| 511 | - | |
| 512 | 511 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -506,6 +506,5 @@ | |
| 506 | db_finalize(&q); |
| 507 | db_finalize(&ins); |
| 508 | bag_clear(&seen); |
| 509 | bag_clear(&pending); |
| 510 | } |
| 511 | |
| 512 |
| --- src/descendants.c | |
| +++ src/descendants.c | |
| @@ -506,6 +506,5 @@ | |
| 506 | db_finalize(&q); |
| 507 | db_finalize(&ins); |
| 508 | bag_clear(&seen); |
| 509 | bag_clear(&pending); |
| 510 | } |
| 511 |
+1
-1
| --- src/event.c | ||
| +++ src/event.c | ||
| @@ -365,11 +365,11 @@ | ||
| 365 | 365 | }else{ |
| 366 | 366 | @ <tr><td> |
| 367 | 367 | } |
| 368 | 368 | blob_zero(&com); |
| 369 | 369 | blob_append(&com, zComment, -1); |
| 370 | - wiki_convert(&com, 0, WIKI_INLINE); | |
| 370 | + wiki_convert(&com, 0, WIKI_INLINE|WIKI_NOBADLINKS); | |
| 371 | 371 | @ </td></tr></table> |
| 372 | 372 | @ </blockquote> |
| 373 | 373 | @ <p><b>Page content preview:</b><p> |
| 374 | 374 | @ <blockquote> |
| 375 | 375 | blob_zero(&event); |
| 376 | 376 |
| --- src/event.c | |
| +++ src/event.c | |
| @@ -365,11 +365,11 @@ | |
| 365 | }else{ |
| 366 | @ <tr><td> |
| 367 | } |
| 368 | blob_zero(&com); |
| 369 | blob_append(&com, zComment, -1); |
| 370 | wiki_convert(&com, 0, WIKI_INLINE); |
| 371 | @ </td></tr></table> |
| 372 | @ </blockquote> |
| 373 | @ <p><b>Page content preview:</b><p> |
| 374 | @ <blockquote> |
| 375 | blob_zero(&event); |
| 376 |
| --- src/event.c | |
| +++ src/event.c | |
| @@ -365,11 +365,11 @@ | |
| 365 | }else{ |
| 366 | @ <tr><td> |
| 367 | } |
| 368 | blob_zero(&com); |
| 369 | blob_append(&com, zComment, -1); |
| 370 | wiki_convert(&com, 0, WIKI_INLINE|WIKI_NOBADLINKS); |
| 371 | @ </td></tr></table> |
| 372 | @ </blockquote> |
| 373 | @ <p><b>Page content preview:</b><p> |
| 374 | @ <blockquote> |
| 375 | blob_zero(&event); |
| 376 |
+2
-2
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -865,11 +865,11 @@ | ||
| 865 | 865 | const char *zDate = db_column_text(&q, 0); |
| 866 | 866 | const char *zUser = db_column_text(&q, 1); |
| 867 | 867 | const char *zUuid = db_column_text(&q, 3); |
| 868 | 868 | const char *zTagList = db_column_text(&q, 4); |
| 869 | 869 | Blob comment; |
| 870 | - int wikiFlags = WIKI_INLINE; | |
| 870 | + int wikiFlags = WIKI_INLINE|WIKI_NOBADLINKS; | |
| 871 | 871 | if( db_get_boolean("timeline-block-markup", 0)==0 ){ |
| 872 | 872 | wikiFlags |= WIKI_NOBLOCK; |
| 873 | 873 | } |
| 874 | 874 | hyperlink_to_uuid(zUuid); |
| 875 | 875 | blob_zero(&comment); |
| @@ -2153,11 +2153,11 @@ | ||
| 2153 | 2153 | if( zNewColor && zNewColor[0] ){ |
| 2154 | 2154 | @ <tr><td style="background-color: %h(zNewColor);"> |
| 2155 | 2155 | }else{ |
| 2156 | 2156 | @ <tr><td> |
| 2157 | 2157 | } |
| 2158 | - wiki_convert(&comment, 0, WIKI_INLINE); | |
| 2158 | + wiki_convert(&comment, 0, WIKI_INLINE|WIKI_NOBADLINKS); | |
| 2159 | 2159 | blob_zero(&suffix); |
| 2160 | 2160 | blob_appendf(&suffix, "(user: %h", zNewUser); |
| 2161 | 2161 | db_prepare(&q, "SELECT substr(tagname,5) FROM tagxref, tag" |
| 2162 | 2162 | " WHERE tagname GLOB 'sym-*' AND tagxref.rid=%d" |
| 2163 | 2163 | " AND tagtype>1 AND tag.tagid=tagxref.tagid", |
| 2164 | 2164 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -865,11 +865,11 @@ | |
| 865 | const char *zDate = db_column_text(&q, 0); |
| 866 | const char *zUser = db_column_text(&q, 1); |
| 867 | const char *zUuid = db_column_text(&q, 3); |
| 868 | const char *zTagList = db_column_text(&q, 4); |
| 869 | Blob comment; |
| 870 | int wikiFlags = WIKI_INLINE; |
| 871 | if( db_get_boolean("timeline-block-markup", 0)==0 ){ |
| 872 | wikiFlags |= WIKI_NOBLOCK; |
| 873 | } |
| 874 | hyperlink_to_uuid(zUuid); |
| 875 | blob_zero(&comment); |
| @@ -2153,11 +2153,11 @@ | |
| 2153 | if( zNewColor && zNewColor[0] ){ |
| 2154 | @ <tr><td style="background-color: %h(zNewColor);"> |
| 2155 | }else{ |
| 2156 | @ <tr><td> |
| 2157 | } |
| 2158 | wiki_convert(&comment, 0, WIKI_INLINE); |
| 2159 | blob_zero(&suffix); |
| 2160 | blob_appendf(&suffix, "(user: %h", zNewUser); |
| 2161 | db_prepare(&q, "SELECT substr(tagname,5) FROM tagxref, tag" |
| 2162 | " WHERE tagname GLOB 'sym-*' AND tagxref.rid=%d" |
| 2163 | " AND tagtype>1 AND tag.tagid=tagxref.tagid", |
| 2164 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -865,11 +865,11 @@ | |
| 865 | const char *zDate = db_column_text(&q, 0); |
| 866 | const char *zUser = db_column_text(&q, 1); |
| 867 | const char *zUuid = db_column_text(&q, 3); |
| 868 | const char *zTagList = db_column_text(&q, 4); |
| 869 | Blob comment; |
| 870 | int wikiFlags = WIKI_INLINE|WIKI_NOBADLINKS; |
| 871 | if( db_get_boolean("timeline-block-markup", 0)==0 ){ |
| 872 | wikiFlags |= WIKI_NOBLOCK; |
| 873 | } |
| 874 | hyperlink_to_uuid(zUuid); |
| 875 | blob_zero(&comment); |
| @@ -2153,11 +2153,11 @@ | |
| 2153 | if( zNewColor && zNewColor[0] ){ |
| 2154 | @ <tr><td style="background-color: %h(zNewColor);"> |
| 2155 | }else{ |
| 2156 | @ <tr><td> |
| 2157 | } |
| 2158 | wiki_convert(&comment, 0, WIKI_INLINE|WIKI_NOBADLINKS); |
| 2159 | blob_zero(&suffix); |
| 2160 | blob_appendf(&suffix, "(user: %h", zNewUser); |
| 2161 | db_prepare(&q, "SELECT substr(tagname,5) FROM tagxref, tag" |
| 2162 | " WHERE tagname GLOB 'sym-*' AND tagxref.rid=%d" |
| 2163 | " AND tagtype>1 AND tag.tagid=tagxref.tagid", |
| 2164 |
+1
-1
| --- src/report.c | ||
| +++ src/report.c | ||
| @@ -730,11 +730,11 @@ | ||
| 730 | 730 | } |
| 731 | 731 | if( zData[0] ){ |
| 732 | 732 | Blob content; |
| 733 | 733 | @ </tr><tr style="background-color:%h(zBg)"><td colspan=%d(pState->nCol)> |
| 734 | 734 | blob_init(&content, zData, -1); |
| 735 | - wiki_convert(&content, 0, 0); | |
| 735 | + wiki_convert(&content, 0, WIKI_NOBADLINKS); | |
| 736 | 736 | blob_reset(&content); |
| 737 | 737 | } |
| 738 | 738 | }else if( azName[i][0]=='#' ){ |
| 739 | 739 | zTid = zData; |
| 740 | 740 | @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> |
| 741 | 741 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -730,11 +730,11 @@ | |
| 730 | } |
| 731 | if( zData[0] ){ |
| 732 | Blob content; |
| 733 | @ </tr><tr style="background-color:%h(zBg)"><td colspan=%d(pState->nCol)> |
| 734 | blob_init(&content, zData, -1); |
| 735 | wiki_convert(&content, 0, 0); |
| 736 | blob_reset(&content); |
| 737 | } |
| 738 | }else if( azName[i][0]=='#' ){ |
| 739 | zTid = zData; |
| 740 | @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> |
| 741 |
| --- src/report.c | |
| +++ src/report.c | |
| @@ -730,11 +730,11 @@ | |
| 730 | } |
| 731 | if( zData[0] ){ |
| 732 | Blob content; |
| 733 | @ </tr><tr style="background-color:%h(zBg)"><td colspan=%d(pState->nCol)> |
| 734 | blob_init(&content, zData, -1); |
| 735 | wiki_convert(&content, 0, WIKI_NOBADLINKS); |
| 736 | blob_reset(&content); |
| 737 | } |
| 738 | }else if( azName[i][0]=='#' ){ |
| 739 | zTid = zData; |
| 740 | @ <td valign="top">%z(href("%R/tktview?name=%h",zData))%h(zData)</a></td> |
| 741 |
+1
-1
| --- src/th_main.c | ||
| +++ src/th_main.c | ||
| @@ -164,11 +164,11 @@ | ||
| 164 | 164 | return Th_WrongNumArgs(interp, "wiki STRING"); |
| 165 | 165 | } |
| 166 | 166 | if( enableOutput ){ |
| 167 | 167 | Blob src; |
| 168 | 168 | blob_init(&src, (char*)argv[1], argl[1]); |
| 169 | - wiki_convert(&src, 0, WIKI_INLINE); | |
| 169 | + wiki_convert(&src, 0, WIKI_INLINE|WIKI_NOBADLINKS); | |
| 170 | 170 | blob_reset(&src); |
| 171 | 171 | } |
| 172 | 172 | return TH_OK; |
| 173 | 173 | } |
| 174 | 174 | |
| 175 | 175 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -164,11 +164,11 @@ | |
| 164 | return Th_WrongNumArgs(interp, "wiki STRING"); |
| 165 | } |
| 166 | if( enableOutput ){ |
| 167 | Blob src; |
| 168 | blob_init(&src, (char*)argv[1], argl[1]); |
| 169 | wiki_convert(&src, 0, WIKI_INLINE); |
| 170 | blob_reset(&src); |
| 171 | } |
| 172 | return TH_OK; |
| 173 | } |
| 174 | |
| 175 |
| --- src/th_main.c | |
| +++ src/th_main.c | |
| @@ -164,11 +164,11 @@ | |
| 164 | return Th_WrongNumArgs(interp, "wiki STRING"); |
| 165 | } |
| 166 | if( enableOutput ){ |
| 167 | Blob src; |
| 168 | blob_init(&src, (char*)argv[1], argl[1]); |
| 169 | wiki_convert(&src, 0, WIKI_INLINE|WIKI_NOBADLINKS); |
| 170 | blob_reset(&src); |
| 171 | } |
| 172 | return TH_OK; |
| 173 | } |
| 174 | |
| 175 |
+2
-2
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -209,13 +209,13 @@ | ||
| 209 | 209 | |
| 210 | 210 | zPrevDate[0] = 0; |
| 211 | 211 | plainText = db_get_int("timeline-plaintext", 0); |
| 212 | 212 | mxWikiLen = db_get_int("timeline-max-comment", 0); |
| 213 | 213 | if( db_get_boolean("timeline-block-markup", 0) ){ |
| 214 | - wikiFlags = WIKI_INLINE; | |
| 214 | + wikiFlags = WIKI_INLINE | WIKI_NOBADLINKS; | |
| 215 | 215 | }else{ |
| 216 | - wikiFlags = WIKI_INLINE | WIKI_NOBLOCK; | |
| 216 | + wikiFlags = WIKI_INLINE | WIKI_NOBLOCK | WIKI_NOBADLINKS; | |
| 217 | 217 | } |
| 218 | 218 | if( tmFlags & TIMELINE_GRAPH ){ |
| 219 | 219 | pGraph = graph_init(); |
| 220 | 220 | /* style is not moved to css, because this is |
| 221 | 221 | ** a technical div for the timeline graph |
| 222 | 222 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -209,13 +209,13 @@ | |
| 209 | |
| 210 | zPrevDate[0] = 0; |
| 211 | plainText = db_get_int("timeline-plaintext", 0); |
| 212 | mxWikiLen = db_get_int("timeline-max-comment", 0); |
| 213 | if( db_get_boolean("timeline-block-markup", 0) ){ |
| 214 | wikiFlags = WIKI_INLINE; |
| 215 | }else{ |
| 216 | wikiFlags = WIKI_INLINE | WIKI_NOBLOCK; |
| 217 | } |
| 218 | if( tmFlags & TIMELINE_GRAPH ){ |
| 219 | pGraph = graph_init(); |
| 220 | /* style is not moved to css, because this is |
| 221 | ** a technical div for the timeline graph |
| 222 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -209,13 +209,13 @@ | |
| 209 | |
| 210 | zPrevDate[0] = 0; |
| 211 | plainText = db_get_int("timeline-plaintext", 0); |
| 212 | mxWikiLen = db_get_int("timeline-max-comment", 0); |
| 213 | if( db_get_boolean("timeline-block-markup", 0) ){ |
| 214 | wikiFlags = WIKI_INLINE | WIKI_NOBADLINKS; |
| 215 | }else{ |
| 216 | wikiFlags = WIKI_INLINE | WIKI_NOBLOCK | WIKI_NOBADLINKS; |
| 217 | } |
| 218 | if( tmFlags & TIMELINE_GRAPH ){ |
| 219 | pGraph = graph_init(); |
| 220 | /* style is not moved to css, because this is |
| 221 | ** a technical div for the timeline graph |
| 222 |
+2
-2
| --- src/tkt.c | ||
| +++ src/tkt.c | ||
| @@ -829,15 +829,15 @@ | ||
| 829 | 829 | const char *z; |
| 830 | 830 | z = pTkt->aField[i].zName; |
| 831 | 831 | blob_set(&val, pTkt->aField[i].zValue); |
| 832 | 832 | if( z[0]=='+' ){ |
| 833 | 833 | @ <li>Appended to %h(&z[1]):<blockquote> |
| 834 | - wiki_convert(&val, 0, 0); | |
| 834 | + wiki_convert(&val, 0, WIKI_NOBADLINKS); | |
| 835 | 835 | @ </blockquote></li> |
| 836 | 836 | }else if( blob_size(&val)<=50 && contains_newline(&val) ){ |
| 837 | 837 | @ <li>Change %h(z) to:<blockquote> |
| 838 | - wiki_convert(&val, 0, 0); | |
| 838 | + wiki_convert(&val, 0, WIKI_NOBADLINKS); | |
| 839 | 839 | @ </blockquote></li> |
| 840 | 840 | }else{ |
| 841 | 841 | @ <li>Change %h(z) to "%h(blob_str(&val))"</li> |
| 842 | 842 | } |
| 843 | 843 | blob_reset(&val); |
| 844 | 844 |
| --- src/tkt.c | |
| +++ src/tkt.c | |
| @@ -829,15 +829,15 @@ | |
| 829 | const char *z; |
| 830 | z = pTkt->aField[i].zName; |
| 831 | blob_set(&val, pTkt->aField[i].zValue); |
| 832 | if( z[0]=='+' ){ |
| 833 | @ <li>Appended to %h(&z[1]):<blockquote> |
| 834 | wiki_convert(&val, 0, 0); |
| 835 | @ </blockquote></li> |
| 836 | }else if( blob_size(&val)<=50 && contains_newline(&val) ){ |
| 837 | @ <li>Change %h(z) to:<blockquote> |
| 838 | wiki_convert(&val, 0, 0); |
| 839 | @ </blockquote></li> |
| 840 | }else{ |
| 841 | @ <li>Change %h(z) to "%h(blob_str(&val))"</li> |
| 842 | } |
| 843 | blob_reset(&val); |
| 844 |
| --- src/tkt.c | |
| +++ src/tkt.c | |
| @@ -829,15 +829,15 @@ | |
| 829 | const char *z; |
| 830 | z = pTkt->aField[i].zName; |
| 831 | blob_set(&val, pTkt->aField[i].zValue); |
| 832 | if( z[0]=='+' ){ |
| 833 | @ <li>Appended to %h(&z[1]):<blockquote> |
| 834 | wiki_convert(&val, 0, WIKI_NOBADLINKS); |
| 835 | @ </blockquote></li> |
| 836 | }else if( blob_size(&val)<=50 && contains_newline(&val) ){ |
| 837 | @ <li>Change %h(z) to:<blockquote> |
| 838 | wiki_convert(&val, 0, WIKI_NOBADLINKS); |
| 839 | @ </blockquote></li> |
| 840 | }else{ |
| 841 | @ <li>Change %h(z) to "%h(blob_str(&val))"</li> |
| 842 | } |
| 843 | blob_reset(&val); |
| 844 |
+5
-6
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -1084,18 +1084,20 @@ | ||
| 1084 | 1084 | /* |
| 1085 | 1085 | ** Return a pointer to the name part of zTarget (skipping the "wiki:" prefix |
| 1086 | 1086 | ** if there is one) if zTarget is a valid wiki page name. Return NULL if |
| 1087 | 1087 | ** zTarget names a page that does not exist. |
| 1088 | 1088 | */ |
| 1089 | -static const char *validWikiPageName(const char *zTarget){ | |
| 1089 | +static const char *validWikiPageName(Renderer *p, const char *zTarget){ | |
| 1090 | 1090 | if( strncmp(zTarget, "wiki:", 5)==0 |
| 1091 | 1091 | && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ |
| 1092 | 1092 | return zTarget+5; |
| 1093 | 1093 | } |
| 1094 | 1094 | if( strcmp(zTarget, "Sandbox")==0 ) return zTarget; |
| 1095 | 1095 | if( wiki_name_is_wellformed((const unsigned char *)zTarget) |
| 1096 | - && db_exists("SELECT 1 FROM tag WHERE tagname GLOB 'wiki-%q'", zTarget) ){ | |
| 1096 | + && ((p->state & WIKI_NOBADLINKS)==0 || | |
| 1097 | + db_exists("SELECT 1 FROM tag WHERE tagname GLOB 'wiki-%q'", zTarget)) | |
| 1098 | + ){ | |
| 1097 | 1099 | return zTarget; |
| 1098 | 1100 | } |
| 1099 | 1101 | return 0; |
| 1100 | 1102 | } |
| 1101 | 1103 | |
| @@ -1194,11 +1196,11 @@ | ||
| 1194 | 1196 | zTerm = "]</a>"; |
| 1195 | 1197 | } |
| 1196 | 1198 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1197 | 1199 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1198 | 1200 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1199 | - }else if( (z = validWikiPageName(zTarget))!=0 ){ | |
| 1201 | + }else if( (z = validWikiPageName(p, zTarget))!=0 ){ | |
| 1200 | 1202 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1201 | 1203 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1202 | 1204 | /* Probably an array subscript in code */ |
| 1203 | 1205 | zTerm = ""; |
| 1204 | 1206 | }else if( (p->state & (WIKI_NOBADLINKS|WIKI_DECORATEONLY))!=0 ){ |
| @@ -1592,13 +1594,10 @@ | ||
| 1592 | 1594 | ** reply. |
| 1593 | 1595 | */ |
| 1594 | 1596 | void wiki_convert(Blob *pIn, Blob *pOut, int flags){ |
| 1595 | 1597 | Renderer renderer; |
| 1596 | 1598 | |
| 1597 | - /* Never show bad hyperlinks */ | |
| 1598 | - flags |= WIKI_NOBADLINKS; | |
| 1599 | - | |
| 1600 | 1599 | memset(&renderer, 0, sizeof(renderer)); |
| 1601 | 1600 | renderer.renderFlags = flags; |
| 1602 | 1601 | renderer.state = ALLOW_WIKI|AT_NEWLINE|AT_PARAGRAPH|flags; |
| 1603 | 1602 | if( flags & WIKI_NOBLOCK ){ |
| 1604 | 1603 | renderer.state |= INLINE_MARKUP_ONLY; |
| 1605 | 1604 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1084,18 +1084,20 @@ | |
| 1084 | /* |
| 1085 | ** Return a pointer to the name part of zTarget (skipping the "wiki:" prefix |
| 1086 | ** if there is one) if zTarget is a valid wiki page name. Return NULL if |
| 1087 | ** zTarget names a page that does not exist. |
| 1088 | */ |
| 1089 | static const char *validWikiPageName(const char *zTarget){ |
| 1090 | if( strncmp(zTarget, "wiki:", 5)==0 |
| 1091 | && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ |
| 1092 | return zTarget+5; |
| 1093 | } |
| 1094 | if( strcmp(zTarget, "Sandbox")==0 ) return zTarget; |
| 1095 | if( wiki_name_is_wellformed((const unsigned char *)zTarget) |
| 1096 | && db_exists("SELECT 1 FROM tag WHERE tagname GLOB 'wiki-%q'", zTarget) ){ |
| 1097 | return zTarget; |
| 1098 | } |
| 1099 | return 0; |
| 1100 | } |
| 1101 | |
| @@ -1194,11 +1196,11 @@ | |
| 1194 | zTerm = "]</a>"; |
| 1195 | } |
| 1196 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1197 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1198 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1199 | }else if( (z = validWikiPageName(zTarget))!=0 ){ |
| 1200 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1201 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1202 | /* Probably an array subscript in code */ |
| 1203 | zTerm = ""; |
| 1204 | }else if( (p->state & (WIKI_NOBADLINKS|WIKI_DECORATEONLY))!=0 ){ |
| @@ -1592,13 +1594,10 @@ | |
| 1592 | ** reply. |
| 1593 | */ |
| 1594 | void wiki_convert(Blob *pIn, Blob *pOut, int flags){ |
| 1595 | Renderer renderer; |
| 1596 | |
| 1597 | /* Never show bad hyperlinks */ |
| 1598 | flags |= WIKI_NOBADLINKS; |
| 1599 | |
| 1600 | memset(&renderer, 0, sizeof(renderer)); |
| 1601 | renderer.renderFlags = flags; |
| 1602 | renderer.state = ALLOW_WIKI|AT_NEWLINE|AT_PARAGRAPH|flags; |
| 1603 | if( flags & WIKI_NOBLOCK ){ |
| 1604 | renderer.state |= INLINE_MARKUP_ONLY; |
| 1605 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -1084,18 +1084,20 @@ | |
| 1084 | /* |
| 1085 | ** Return a pointer to the name part of zTarget (skipping the "wiki:" prefix |
| 1086 | ** if there is one) if zTarget is a valid wiki page name. Return NULL if |
| 1087 | ** zTarget names a page that does not exist. |
| 1088 | */ |
| 1089 | static const char *validWikiPageName(Renderer *p, const char *zTarget){ |
| 1090 | if( strncmp(zTarget, "wiki:", 5)==0 |
| 1091 | && wiki_name_is_wellformed((const unsigned char*)zTarget) ){ |
| 1092 | return zTarget+5; |
| 1093 | } |
| 1094 | if( strcmp(zTarget, "Sandbox")==0 ) return zTarget; |
| 1095 | if( wiki_name_is_wellformed((const unsigned char *)zTarget) |
| 1096 | && ((p->state & WIKI_NOBADLINKS)==0 || |
| 1097 | db_exists("SELECT 1 FROM tag WHERE tagname GLOB 'wiki-%q'", zTarget)) |
| 1098 | ){ |
| 1099 | return zTarget; |
| 1100 | } |
| 1101 | return 0; |
| 1102 | } |
| 1103 | |
| @@ -1194,11 +1196,11 @@ | |
| 1196 | zTerm = "]</a>"; |
| 1197 | } |
| 1198 | }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' |
| 1199 | && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ |
| 1200 | blob_appendf(p->pOut, "<a href=\"%R/timeline?c=%T\">", zTarget); |
| 1201 | }else if( (z = validWikiPageName(p, zTarget))!=0 ){ |
| 1202 | blob_appendf(p->pOut, "<a href=\"%R/wiki?name=%T\">", z); |
| 1203 | }else if( zTarget>=&zOrig[2] && !fossil_isspace(zTarget[-2]) ){ |
| 1204 | /* Probably an array subscript in code */ |
| 1205 | zTerm = ""; |
| 1206 | }else if( (p->state & (WIKI_NOBADLINKS|WIKI_DECORATEONLY))!=0 ){ |
| @@ -1592,13 +1594,10 @@ | |
| 1594 | ** reply. |
| 1595 | */ |
| 1596 | void wiki_convert(Blob *pIn, Blob *pOut, int flags){ |
| 1597 | Renderer renderer; |
| 1598 | |
| 1599 | memset(&renderer, 0, sizeof(renderer)); |
| 1600 | renderer.renderFlags = flags; |
| 1601 | renderer.state = ALLOW_WIKI|AT_NEWLINE|AT_PARAGRAPH|flags; |
| 1602 | if( flags & WIKI_NOBLOCK ){ |
| 1603 | renderer.state |= INLINE_MARKUP_ONLY; |
| 1604 |