Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Added -html|-h flag to the wiki command, as discussed in forumpost/7377c83dca, and cleaned up the command's help text and argument validation. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
b23eb8331488435e423eefae2aee7607 |
User & Date: | stephan 2020-01-28 02:53:22 |
Context
2020-01-28
| ||
03:49 | Added -H|-html and -p|-pre flags to wiki command. Added fossil_fopen_for_output() and fossil_fclose() to support that. ... (check-in: fe86954f user: stephan tags: trunk) | |
02:53 | Added -html|-h flag to the wiki command, as discussed in forumpost/7377c83dca, and cleaned up the command's help text and argument validation. ... (check-in: b23eb833 user: stephan tags: trunk) | |
2020-01-27
| ||
06:56 | Added --inverse/-v flag to the tag command, as covered in forumpost/d717561e8b7406fc. ... (check-in: 890614f1 user: stephan tags: trunk) | |
Changes
Changes to src/wiki.c.
︙ | ︙ | |||
1222 1223 1224 1225 1226 1227 1228 | zWDisplayName = mprintf("%s", zWName); } if( wrid==0 ){ if( !showAll ) continue; @ <tr><td data-sortkey="%h(zSort)">\ @ %z(href("%R/whistory?name=%T",zWName))<s>%h(zWDisplayName)</s></a></td> }else{ | | | 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 | zWDisplayName = mprintf("%s", zWName); } if( wrid==0 ){ if( !showAll ) continue; @ <tr><td data-sortkey="%h(zSort)">\ @ %z(href("%R/whistory?name=%T",zWName))<s>%h(zWDisplayName)</s></a></td> }else{ @ <tr><td data=sortkey="%h(zSort)">\ @ %z(href("%R/wiki?name=%T",zWName))%h(zWDisplayName)</a></td> } zAge = human_readable_age(rNow - rWmtime); @ <td data-sortkey="%016llx(iMtime)">%s(zAge)</td> fossil_free(zAge); @ <td>%z(href("%R/whistory?name=%T",zWName))%d(wcnt)</a></td> if( showRid ){ |
︙ | ︙ | |||
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 | /* ** 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. ** ** 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. ** ** %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. |
︙ | ︙ | |||
1442 1443 1444 1445 1446 1447 1448 | if( strncmp(g.argv[2],"export",n)==0 ){ const char *zPageName; /* Name of the wiki page to export */ const char *zFile; /* Name of the output file (0=stdout) */ 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 */ | | > > > | > | > | > > > > > > > > > > > > > > > > > > > > > > > > > | 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 | if( strncmp(g.argv[2],"export",n)==0 ){ const char *zPageName; /* Name of the wiki page to export */ const char *zFile; /* Name of the output file (0=stdout) */ 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 */ fHtml = find_option("html","h",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]; rid = db_int(0, "SELECT x.rid FROM tag t, tagxref x" " WHERE x.tagid=t.tagid AND t.tagname='wiki-%q'" " ORDER BY x.mtime DESC LIMIT 1", zPageName ); if( (pWiki = manifest_get(rid, CFTYPE_WIKI, 0))!=0 ){ zBody = pWiki->zWiki; } if( zBody==0 ){ fossil_fatal("wiki page [%s] not found",zPageName); } zFile = (g.argc==4) ? "-" : g.argv[4]; }else{ if( (g.argc!=3) && (g.argc!=4) ){ usage("export ?-html? ?FILE? --technote " "DATETIME|TECHNOTE-ID"); } rid = wiki_technote_to_rid(zETime); if ( rid==-1 ){ fossil_fatal("ambiguous tech note id: %s", zETime); } if( (pWiki = manifest_get(rid, CFTYPE_EVENT, 0))!=0 ){ zBody = pWiki->zWiki; } if( zBody==0 ){ fossil_fatal("technote [%s] not found",zETime); } zFile = (g.argc==3) ? "-" : g.argv[3]; } for(i=strlen(zBody); i>0 && fossil_isspace(zBody[i-1]); i--){} zBody[i] = 0; blob_init(&body, zBody, -1); if(fHtml==0){ blob_append(&body, "\n", 1); }else{ Blob html = empty_blob; /* HTML-ized content */ const char * zMimetype = wiki_filter_mimetypes(pWiki->zMimetype); if( fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){ wiki_convert(&body,&html,0); }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){ markdown_to_html(&body,0,&html) /* TODO: add -HTML|-H flag to work like -html|-h but also ** add <html><body> tag wrappers around the output. The ** hurdle here is that the markdown converter resets its ** input blob before appending the output, which is ** different from wiki_convert() and htmlize_to_blob(), and ** precludes us simply appending the opening <html><body> ** part to the body */; }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){ htmlize_to_blob(&html,zBody,i); }else{ fossil_fatal("Unsupported MIME type '%s' for wiki page '%s'.", zMimetype, pWiki->zWikiTitle ); } blob_reset(&body); body = html /* transfer memory */; } blob_write_to_file(&body, zFile); 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 */ int rid = 0; Manifest *pWiki = 0; /* Parsed wiki page content */ const int isCreate = 'r'==g.argv[2][1] /* else "commit" */; const char *zMimeType = find_option("mimetype", "M", 1); const char *zETime = find_option("technote", "t", 1); const char *zTags = find_option("technote-tags", NULL, 1); const char *zClr = find_option("technote-bgcolor", NULL, 1); verify_all_options(); if( g.argc!=4 && g.argc!=5 ){ usage("commit|create PAGENAME ?FILE? [--mimetype TEXT-FORMAT]" " [--technote DATETIME] [--technote-tags TAGS]" " [--technote-bgcolor COLOR]"); } zPageName = g.argv[3]; if( g.argc==4 ){ |
︙ | ︙ | |||
1575 1576 1577 1578 1579 1580 1581 | }else{ fossil_fatal("ambiguous tech note id: %s", zETime); } } manifest_destroy(pWiki); blob_reset(&content); }else if( strncmp(g.argv[2],"delete",n)==0 ){ | | > | | | < < | 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 | }else{ fossil_fatal("ambiguous tech note id: %s", zETime); } } manifest_destroy(pWiki); blob_reset(&content); }else if( strncmp(g.argv[2],"delete",n)==0 ){ if( g.argc!=4 ){ usage("delete PAGENAME"); } fossil_fatal("delete not yet implemented."); }else if(( strncmp(g.argv[2],"list",n)==0 ) || ( strncmp(g.argv[2],"ls",n)==0 )){ Stmt q; const int fTechnote = find_option("technote","t",0)!=0; const int showIds = find_option("show-technote-ids","s",0)!=0; verify_all_options(); if (fTechnote==0){ db_prepare(&q, "SELECT substr(tagname, 6) FROM tag WHERE tagname GLOB 'wiki-*'" " ORDER BY lower(tagname) /*sort*/" ); }else{ db_prepare(&q, "SELECT datetime(e.mtime), substr(t.tagname,7)" " FROM event e, tag t" " WHERE e.type='e'" " AND e.tagid IS NOT NULL" " AND t.tagid=e.tagid" " ORDER BY e.mtime DESC /*sort*/" ); } while( db_step(&q)==SQLITE_ROW ){ const char *zName = db_column_text(&q, 0); if( showIds ){ const char *zUuid = db_column_text(&q, 1); fossil_print("%s ",zUuid); } fossil_print( "%s\n",zName); |
︙ | ︙ |