@@ -30,14 +30,15 @@
30 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_NOBLOCK 0x004 /* No block markup of any kind */
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_BUTTONS 0x008 /* Allow sub-menu buttons */
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_NOBADLINKS 0x010 /* Ignore broken hyperlinks */
33 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_LINKSONLY 0x020 /* No markup. Only decorate links */
34 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_NEWLINE 0x040 /* Honor \n - break lines at each \n */
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define WIKI_MARKDOWNLINKS 0x080 /* Resolve hyperlinks as in markdown */
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WIKI_MARKDOWN_URL 0x080 /* Hyperlink targets as in markdown */
36 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_SAFE 0x100 /* Make the result safe for embedding */
37 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_TARGET_BLANK 0x200 /* Hyperlinks go to a new window */
38 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WIKI_NOBRACKET 0x400 /* Omit extra [..] around hyperlinks */
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WIKI_MARKDOWN_LINK 0x800 /* Markdown link syntax: [display](URL) */
39 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
40 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
41 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42 43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
43 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These are the only markup attributes allowed.
@@ -1343,13 +1344,13 @@
1343 1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( strlen(zTarget)>=10 && fossil_isdigit(zTarget[0]) && zTarget[4]=='-'
1344 1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& db_int(0, "SELECT datetime(%Q) NOT NULL", zTarget) ){
1345 1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Dates or date-and-times in ISO8610 resolve to a link to the
1346 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** timeline for that date */
1347 1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "<a href=\"%R/timeline?c=%T\"%s>", zTarget, zExtra);
1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( mFlags & WIKI_MARKDOWNLINKS ){
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If none of the above, and if rendering links for markdown, then
1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** create a link to the literal text of the target */
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( mFlags & WIKI_MARKDOWN_URL ){
1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If none of the above, and if rendering link references for markdown,
1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then create a link to the literal text of the target */
1351 1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pOut, "<a href=\"%h\"%s>", zTarget, zExtra);
1352 1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( zOrig && zTarget>=&zOrig[2]
1353 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& zTarget[-1]=='[' && !fossil_isspace(zTarget[-2]) ){
1354 1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the hyperlink markup is not preceded by whitespace, then it
1355 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is probably a C-language subscript or similar, not really a
@@ -1574,25 +1575,43 @@
1574 1575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
1575 1576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1576 1577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TOKEN_LINK: {
1577 1578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zTarget;
1578 1579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zDisplay = 0;
1580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zEnd;
1579 1581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j;
1580 1582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int savedState;
1581 1583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zClose[20];
1582 1584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char cS1 = 0;
1583 1585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iS1 = 0;
1584 1586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1585 1587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
startAutoParagraph(p);
1586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTarget = &z[1];
1587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; z[i] && z[i]!=']'; i++){
1588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z[i]=='|' && zDisplay==0 ){
1589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDisplay = &z[i+1];
1590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(j=i; j>0 && fossil_isspace(z[j-1]); j--){}
1591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iS1 = j;
1592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cS1 = z[j];
1593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z[j] = 0;
1588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[n]=='('
1589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (p->state & WIKI_MARKDOWN_LINK)!=0
1590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (zEnd = strchr(z+n+1,')'))!=0
1591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
1592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Markdown-style hyperlinks: [display-text](URL) or [](URL) */
1593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>2 ){
1594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDisplay = &z[1];
1595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[n] = 0;
1596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDisplay = 0;
1598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTarget = &z[n+1];
1600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=n+1; z[i] && z[i]!=')' && z[i]!=' '; i++){}
1601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = (int)(zEnd - z) + 1;
1602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Wiki-style hyperlinks: [URL|display-text] or [URL] */
1604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTarget = &z[1];
1605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1; z[i] && z[i]!=']'; i++){
1606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[i]=='|' && zDisplay==0 ){
1607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDisplay = &z[i+1];
1608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=i; j>0 && fossil_isspace(z[j-1]); j--){}
1609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iS1 = j;
1610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cS1 = z[j];
1611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z[j] = 0;
1612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1594 1613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1595 1614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1596 1615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z[i] = 0;
1597 1616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zDisplay==0 ){
1598 1617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDisplay = zTarget + interwiki_removable_prefix(zTarget);
@@ -1874,13 +1893,14 @@
1874 1893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --buttons Set the WIKI_BUTTONS flag
1875 1894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --dark-pikchr Render pikchrs in dark mode
1876 1895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --htmlonly Set the WIKI_HTMLONLY flag
1877 1896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --inline Set the WIKI_INLINE flag
1878 1897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --linksonly Set the WIKI_LINKSONLY flag
1898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --md-links Allow markdown link syntax
1879 1899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --nobadlinks Set the WIKI_NOBADLINKS flag
1880 1900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --noblock Set the WIKI_NOBLOCK flag
1881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** --text Run the output through html_to_plaintext().
1901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --text Run the output through html_to_plaintext().
1882 1902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1883 1903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void test_wiki_render(void){
1884 1904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob in, out;
1885 1905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags = 0;
1886 1906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bText;
@@ -1888,10 +1908,11 @@
1888 1908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("htmlonly",0,0)!=0 ) flags |= WIKI_HTMLONLY;
1889 1909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("linksonly",0,0)!=0 ) flags |= WIKI_LINKSONLY;
1890 1910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("nobadlinks",0,0)!=0 ) flags |= WIKI_NOBADLINKS;
1891 1911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("inline",0,0)!=0 ) flags |= WIKI_INLINE;
1892 1912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("noblock",0,0)!=0 ) flags |= WIKI_NOBLOCK;
1913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( find_option("md-links",0,0)!=0 ) flags |= WIKI_MARKDOWN_LINK;
1893 1914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("dark-pikchr",0,0)!=0 ){
1894 1915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pikchr_to_html_add_flags( PIKCHR_PROCESS_DARK_MODE );
1895 1916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1896 1917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bText = find_option("text",0,0)!=0;
1897 1918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_find_and_open_repository(OPEN_OK_NOT_FOUND|OPEN_SUBSTITUTE,0);
@@ -2041,16 +2062,28 @@
2041 2062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2042 2063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = nextWikiToken(z, &renderer, &tokenType);
2043 2064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2044 2065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( tokenType ){
2045 2066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TOKEN_LINK: {
2046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zTarget;
2067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zTarget, *zEnd;
2047 2068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
2048 2069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTarget = &z[1];
2050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; zTarget[i] && zTarget[i]!='|' && zTarget[i]!=']'; i++){}
2051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while(i>1 && zTarget[i-1]==' '){ i--; }
2070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[n]=='('
2071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (flags & WIKI_MARKDOWN_LINK)!=0
2072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (zEnd = strchr(z+n+1,')'))!=0
2073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
2074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Markdown-style hyperlinks: [display-text](URL) or [](URL) */
2075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z += n+1;
2076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTarget = z;
2077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1; z[i] && z[i]!=')' && z[i]!=' '; i++){}
2078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = (int)(zEnd - z) + 1;
2079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Wiki-style hyperlinks: [URL|display-text] or [URL] */
2081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTarget = &z[1];
2082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; zTarget[i] && zTarget[i]!='|' && zTarget[i]!=']'; i++){}
2083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(i>1 && zTarget[i-1]==' '){ i--; }
2084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2052 2085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
backlink_create(pBklnk, zTarget, i);
2053 2086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
2054 2087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2055 2088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TOKEN_MARKUP: {
2056 2089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zId;
2057 2090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!