Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Added -H|-html and -p|-pre flags to [/help?cmd=wiki|wiki command]. Added fossil_fopen_for_output() and fossil_fclose() to support that. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
fe86954ffbf239806fc7c40c19e2bbe7 |
| User & Date: | stephan 2020-01-28 03:49:06.916 |
Context
|
2020-01-28
| ||
| 06:40 | Merged in mimetypes-setting branch. check-in: 009a24313b user: stephan tags: trunk | |
| 03:49 | Added -H|-html and -p|-pre flags to [/help?cmd=wiki|wiki command]. Added fossil_fopen_for_output() and fossil_fclose() to support that. check-in: fe86954ffb user: stephan tags: trunk | |
| 02:53 | Added -html|-h flag to [/help?cmd=wiki|the wiki command], as discussed in [https://fossil-scm.org/forum/forumpost/7377c83dca|forumpost/7377c83dca], and cleaned up the command's help text and argument validation. check-in: b23eb83314 user: stephan tags: trunk | |
Changes
Changes to src/file.c.
| ︙ | ︙ | |||
1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 |
fossil_path_free(uName);
fossil_unicode_free(uMode);
#else
FILE *f = fopen(zName, zMode);
#endif
return f;
}
/*
** Return non-NULL if zFilename contains pathname elements that
** are reserved on Windows. The returned string is the disallowed
** path element.
*/
const char *file_is_win_reserved(const char *zPath){
| > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 |
fossil_path_free(uName);
fossil_unicode_free(uMode);
#else
FILE *f = fopen(zName, zMode);
#endif
return f;
}
/*
** Works like fclose() except that is a no-op if f is 0 and it
** flushes, but does not close, f if it is one of (stdout, stderr).
*/
void fossil_fclose(FILE *f){
if(f!=0){
if(stdout==f || stderr==f){
fflush(f);
}else{
fclose(f);
}
}
}
/*
** Works like fopen(zName,"wb") except that:
**
** 1) If zName is "-", the stdout handle is returned.
**
** 2) Else file_mkfolder() is used to create all directories
** which lead up to the file before opening it.
**
** 3) It fails fatally if the file cannot be opened.
*/
FILE *fossil_fopen_for_output(const char *zFilename){
if(zFilename[0]=='-' && zFilename[1]==0){
return stdout;
}else{
FILE * p;
file_mkfolder(zFilename, ExtFILE, 1, 0);
p = fossil_fopen(zFilename, "wb");
if( p==0 ){
#if _WIN32
const char *zReserved = file_is_win_reserved(zFilename);
if( zReserved ){
fossil_fatal("cannot open \"%s\" because \"%s\" is "
"a reserved name on Windows", zFilename,
zReserved);
}
#endif
fossil_fatal("unable to open file \"%s\" for writing",
zFilename);
}
return p;
}
}
/*
** Return non-NULL if zFilename contains pathname elements that
** are reserved on Windows. The returned string is the disallowed
** path element.
*/
const char *file_is_win_reserved(const char *zPath){
|
| ︙ | ︙ |
Changes to src/wiki.c.
| ︙ | ︙ | |||
1362 1363 1364 1365 1366 1367 1368 | /* ** COMMAND: wiki* ** ** Usage: %fossil wiki (export|create|commit|list) WikiName ** ** Run various subcommands to work with wiki entries or tech notes. ** | | | | > > > > > > > | 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 | /* ** COMMAND: wiki* ** ** Usage: %fossil wiki (export|create|commit|list) WikiName ** ** Run various subcommands to work with wiki entries or tech notes. ** ** %fossil wiki export ?OPTIONS? PAGENAME ?FILE? ** %fossil wiki export ?OPTIONS? -t|--technote DATETIME|TECHNOTE-ID ?FILE? ** ** Sends the latest version of either a wiki page or of a tech ** note to the given file or standard output. A filename of "-" ** writes the output to standard output. The directory parts of ** the output filename are created if needed. ** ** Options: ** If PAGENAME is provided, the named wiki page will be output. ** --technote|-t DATETIME|TECHNOTE-ID ** Specifies that a technote, rather than a wiki page, ** will be exported. If DATETIME is used, the most ** recently modified tech note with that DATETIME will ** output. ** -h|--html The body (only) is rendered in HTML form, without ** any page header/foot or HTML/BODY tag wrappers. ** -H|--HTML Works like -h|-html but wraps the output in ** <html><body>...</body></html>. ** -p|--pre If -h|-H is used and the page or technote has ** the text/plain mimetype, its HTML-escaped output ** will be wrapped in <pre>...</pre>. ** ** %fossil wiki (create|commit) PAGENAME ?FILE? ?OPTIONS? ** ** Create a new or commit changes to an existing wiki page or ** technote from FILE or from standard input. PAGENAME is the ** name of the wiki entry or the timeline comment of the ** technote. |
| ︙ | ︙ | |||
1451 1452 1453 1454 1455 1456 1457 |
const char *zETime; /* The name of the technote to export */
int rid; /* Artifact ID of the wiki page */
int i; /* Loop counter */
char *zBody = 0; /* Wiki page content */
Blob body = empty_blob; /* Wiki page content */
Manifest *pWiki = 0; /* Parsed wiki page content */
int fHtml = 0; /* Export in HTML form */
| | > > > | > > > > | 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 |
const char *zETime; /* The name of the technote to export */
int rid; /* Artifact ID of the wiki page */
int i; /* Loop counter */
char *zBody = 0; /* Wiki page content */
Blob body = empty_blob; /* Wiki page content */
Manifest *pWiki = 0; /* Parsed wiki page content */
int fHtml = 0; /* Export in HTML form */
FILE * pFile = 0; /* Output file */
int fPre = 0; /* Indicates that -h|-H should be
** wrapped in <pre>...</pre> if pWiki
** has the text/plain mimetype. */
fHtml = find_option("HTML","H",0)!=0
? 2
: (find_option("html","h",0)!=0 ? 1 : 0)
/* 1 == -html, 2 == -HTML */;
fPre = fHtml==0 ? 0 : find_option("pre","p",0)!=0;
zETime = find_option("technote","t",1);
verify_all_options();
if( !zETime ){
if( (g.argc!=4) && (g.argc!=5) ){
usage("export ?-html? PAGENAME ?FILE?");
}
zPageName = g.argv[3];
|
| ︙ | ︙ | |||
1518 1519 1520 1521 1522 1523 1524 |
}else{
fossil_fatal("Unsupported MIME type '%s' for wiki page '%s'.",
zMimetype, pWiki->zWikiTitle );
}
blob_reset(&body);
body = html /* transfer memory */;
}
| > > > > > > > > > > > > > > | | 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 |
}else{
fossil_fatal("Unsupported MIME type '%s' for wiki page '%s'.",
zMimetype, pWiki->zWikiTitle );
}
blob_reset(&body);
body = html /* transfer memory */;
}
pFile = fossil_fopen_for_output(zFile);
if(fHtml==2){
fwrite("<html><body>", 1, 12, pFile);
}
if(fPre!=0){
fwrite("<pre>", 1, 5, pFile);
}
fwrite(blob_buffer(&body), 1, blob_size(&body), pFile);
if(fPre!=0){
fwrite("</pre>", 1, 6, pFile);
}
if(fHtml==2){
fwrite("</body></html>\n", 1, 15, pFile);
}
fossil_fclose(pFile);
blob_reset(&body);
manifest_destroy(pWiki);
return;
}else if( strncmp(g.argv[2],"commit",n)==0
|| strncmp(g.argv[2],"create",n)==0 ){
const char *zPageName; /* page name */
Blob content; /* Input content */
|
| ︙ | ︙ |