Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Markdown hyperlinks are only converted to links to wiki if the named wikipage actually exists. Otherwise, the link becomes a relative link. This is for backwards compatibility. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
3b10e644686bc279a4e8606853572351 |
User & Date: | drh 2019-08-23 11:07:53 |
Context
2019-08-23
| ||
12:23 | If the test-markdown-render or test-wiki-render commands are invoked without a repository in which to check for Wiki page names and artifact hashes, then substitute a temporary, empty, in-memory repository so that the commands will still work and won't give SQL errors. ... (check-in: 0ac64dad user: drh tags: trunk) | |
11:07 | Markdown hyperlinks are only converted to links to wiki if the named wikipage actually exists. Otherwise, the link becomes a relative link. This is for backwards compatibility. ... (check-in: 3b10e644 user: drh tags: trunk) | |
05:32 | Fixed a few fatal error messages from the login-group command that referred to an "add" command, which is now called "join". The symptom I saw is that "fossil login-group add" complained that "add" is not a valid command and that you should give '"add" or "leave"' instead! ... (check-in: 09c65d75 user: wyoung tags: trunk) | |
Changes
Changes to src/markdown_html.c.
︙ | ︙ | |||
431 432 433 434 435 436 437 | char *zLink = blob_buffer(link); char *zTitle = title!=0 && blob_size(title)>0 ? blob_str(title) : 0; char zClose[20]; if( zLink==0 || zLink[0]==0 ){ zClose[0] = 0; }else{ | > > > > | | 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | char *zLink = blob_buffer(link); char *zTitle = title!=0 && blob_size(title)>0 ? blob_str(title) : 0; char zClose[20]; if( zLink==0 || zLink[0]==0 ){ zClose[0] = 0; }else{ static const int flags = WIKI_NOBADLINKS | WIKI_MARKDOWNLINKS ; wiki_resolve_hyperlink(ob, flags, zLink, zClose, sizeof(zClose), 0, zTitle); } if( blob_size(content)==0 ){ if( link ) BLOB_APPEND_BLOB(ob, link); }else{ BLOB_APPEND_BLOB(ob, content); } blob_append(ob, zClose, -1); |
︙ | ︙ |
Changes to src/wiki.c.
︙ | ︙ | |||
1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 | ** Usage: %fossil test-markdown-render FILE ** ** Render markdown wiki from FILE to stdout. ** */ void test_markdown_render(void){ Blob in, out; verify_all_options(); if( g.argc!=3 ) usage("FILE"); blob_zero(&out); blob_read_from_file(&in, g.argv[2], ExtFILE); markdown_to_html(&in, 0, &out); blob_write_to_file(&out, "-"); } | > | 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 | ** Usage: %fossil test-markdown-render FILE ** ** Render markdown wiki from FILE to stdout. ** */ void test_markdown_render(void){ Blob in, out; db_find_and_open_repository(0,0); verify_all_options(); if( g.argc!=3 ) usage("FILE"); blob_zero(&out); blob_read_from_file(&in, g.argv[2], ExtFILE); markdown_to_html(&in, 0, &out); blob_write_to_file(&out, "-"); } |
︙ | ︙ |
Changes to src/wikiformat.c.
︙ | ︙ | |||
28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #define WIKI_HTMLONLY 0x001 /* HTML markup only. No wiki */ #define WIKI_INLINE 0x002 /* Do not surround with <p>..</p> */ #define WIKI_NOBLOCK 0x004 /* No block markup of any kind */ #define WIKI_BUTTONS 0x008 /* Allow sub-menu buttons */ #define WIKI_NOBADLINKS 0x010 /* Ignore broken hyperlinks */ #define WIKI_LINKSONLY 0x020 /* No markup. Only decorate links */ #define WIKI_NEWLINE 0x040 /* Honor \n - break lines at each \n */ #endif /* ** These are the only markup attributes allowed. */ enum allowed_attr_t { | > | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #define WIKI_HTMLONLY 0x001 /* HTML markup only. No wiki */ #define WIKI_INLINE 0x002 /* Do not surround with <p>..</p> */ #define WIKI_NOBLOCK 0x004 /* No block markup of any kind */ #define WIKI_BUTTONS 0x008 /* Allow sub-menu buttons */ #define WIKI_NOBADLINKS 0x010 /* Ignore broken hyperlinks */ #define WIKI_LINKSONLY 0x020 /* No markup. Only decorate links */ #define WIKI_NEWLINE 0x040 /* Honor \n - break lines at each \n */ #define WIKI_MARKDOWNLINKS 0x080 /* Resolve hyperlinks as in markdown */ #endif /* ** These are the only markup attributes allowed. */ enum allowed_attr_t { |
︙ | ︙ | |||
1209 1210 1211 1212 1213 1214 1215 | ** "History" permission. ** ** [http://www.fossil-scm.org/] ** [https://www.fossil-scm.org/] ** [ftp://www.fossil-scm.org/] ** [mailto:fossil-users@lists.fossil-scm.org] ** | | > > | < | > | 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 | ** "History" permission. ** ** [http://www.fossil-scm.org/] ** [https://www.fossil-scm.org/] ** [ftp://www.fossil-scm.org/] ** [mailto:fossil-users@lists.fossil-scm.org] ** ** [/path] -> Refers to the root of the Fossil hierarchy, not ** the root of the URI domain ** ** [./relpath] ** [../relpath] ** ** [#fragment] ** ** [0123456789abcdef] ** ** [WikiPageName] ** [wiki:WikiPageName] ** ** [2010-02-27 07:13] */ void wiki_resolve_hyperlink( Blob *pOut, /* Write the HTML output here */ int mFlags, /* Rendering option flags */ const char *zTarget, /* Hyperlink target; text within [...] */ |
︙ | ︙ | |||
1294 1295 1296 1297 1298 1299 1300 | } }else if( g.perm.Hyperlink ){ blob_appendf(pOut, "%z[",xhref(zExtraNS, "%R/info/%s", zTarget)); zTerm = "]</a>"; }else{ zTerm = ""; } | < < < > > > > > > > > > > | > > | > > | 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 | } }else if( g.perm.Hyperlink ){ blob_appendf(pOut, "%z[",xhref(zExtraNS, "%R/info/%s", zTarget)); zTerm = "]</a>"; }else{ zTerm = ""; } }else if( (z = validWikiPageName(mFlags, zTarget))!=0 ){ /* The link is to a valid wiki page name */ const char *zOverride = wiki_is_overridden(zTarget); if( zOverride ){ blob_appendf(pOut, "<a href=\"%R/info/%S\"%s>", zOverride, zExtra); }else{ blob_appendf(pOut, "<a href=\"%R/wiki?name=%T\"%s>", z, zExtra); } }else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-' && db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){ /* Dates or date-and-times in ISO8610 resolve to a link to the ** timeline for that date */ blob_appendf(pOut, "<a href=\"%R/timeline?c=%T\"%s>", zTarget, zExtra); }else if( mFlags & WIKI_MARKDOWNLINKS ){ /* If none of the above, and if rendering links for markdown, then ** create a link to the literal text of the target */ blob_appendf(pOut, "<a href=\"%h\"%s>", zTarget, zExtra); }else if( zOrig && zTarget>=&zOrig[2] && zTarget[-1]=='[' && !fossil_isspace(zTarget[-2]) ){ /* If the hyperlink markup is not preceded by whitespace, then it ** is probably a C-language subscript or similar, not really a ** hyperlink. Just ignore it. */ zTerm = ""; }else if( (mFlags & (WIKI_NOBADLINKS|WIKI_LINKSONLY))!=0 ){ /* Also ignore the link if various flags are set */ zTerm = ""; }else{ blob_appendf(pOut, "<span class=\"brokenlink\">[%h]", zTarget); zTerm = "</span>"; } if( zExtra ) fossil_free(zExtra); assert( strlen(zTerm)<nClose ); |
︙ | ︙ | |||
1756 1757 1758 1759 1760 1761 1762 | while( renderer.nStack ){ popStack(&renderer); } blob_append(renderer.pOut, "\n", 1); free(renderer.aStack); } | < < < < < < < < < < | 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 | while( renderer.nStack ){ popStack(&renderer); } blob_append(renderer.pOut, "\n", 1); free(renderer.aStack); } /* ** COMMAND: test-wiki-render ** ** Usage: %fossil test-wiki-render FILE [OPTIONS] ** ** Options: ** --buttons Set the WIKI_BUTTONS flag |
︙ | ︙ | |||
1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 | int flags = 0; if( find_option("buttons",0,0)!=0 ) flags |= WIKI_BUTTONS; if( find_option("htmlonly",0,0)!=0 ) flags |= WIKI_HTMLONLY; if( find_option("linksonly",0,0)!=0 ) flags |= WIKI_LINKSONLY; if( find_option("nobadlinks",0,0)!=0 ) flags |= WIKI_NOBADLINKS; if( find_option("inline",0,0)!=0 ) flags |= WIKI_INLINE; if( find_option("noblock",0,0)!=0 ) flags |= WIKI_NOBLOCK; verify_all_options(); if( g.argc!=3 ) usage("FILE"); blob_zero(&out); blob_read_from_file(&in, g.argv[2], ExtFILE); wiki_convert(&in, &out, flags); blob_write_to_file(&out, "-"); } | > | 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 | int flags = 0; if( find_option("buttons",0,0)!=0 ) flags |= WIKI_BUTTONS; if( find_option("htmlonly",0,0)!=0 ) flags |= WIKI_HTMLONLY; if( find_option("linksonly",0,0)!=0 ) flags |= WIKI_LINKSONLY; if( find_option("nobadlinks",0,0)!=0 ) flags |= WIKI_NOBADLINKS; if( find_option("inline",0,0)!=0 ) flags |= WIKI_INLINE; if( find_option("noblock",0,0)!=0 ) flags |= WIKI_NOBLOCK; db_find_and_open_repository(0,0); verify_all_options(); if( g.argc!=3 ) usage("FILE"); blob_zero(&out); blob_read_from_file(&in, g.argv[2], ExtFILE); wiki_convert(&in, &out, flags); blob_write_to_file(&out, "-"); } |
︙ | ︙ |