Fossil SCM

Move wiki_convert_to_html closer to wiki_render_by_mimetype.

vor0nwe 2026-03-08 10:43 rss-content
Commit b78b4665b1cb7276fe1566fc7eff500c7fd587099d412fe4af46c210e3754a69
1 file changed +51 -51
+51 -51
--- src/wiki.c
+++ src/wiki.c
@@ -232,10 +232,61 @@
232232
@ <pre class='textPlain'>
233233
@ %h(blob_str(pWiki))
234234
@ </pre>
235235
}
236236
}
237
+
238
+/*
239
+** Render wiki/markdown/plaintext content into an output blob as HTML.
240
+*/
241
+void wiki_convert_to_html(
242
+ Blob *pOut,
243
+ const char *zMimetype,
244
+ const char *zContent,
245
+ int eDocSrc
246
+){
247
+ Blob in;
248
+ if( pOut==0 ) return;
249
+ if( zContent==0 || zContent[0]==0 ){
250
+ blob_append_literal(pOut, "<i>Deleted</i>");
251
+ return;
252
+ }
253
+ blob_init(&in, 0, 0);
254
+ blob_append(&in, zContent, -1);
255
+ safe_html_context(eDocSrc);
256
+ if( zMimetype==0 || fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){
257
+ wiki_convert(&in, pOut, 0);
258
+ }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
259
+ markdown_to_html(&in, 0, pOut);
260
+ safe_html(pOut);
261
+ }else if( fossil_strcmp(zMimetype, "text/x-pikchr")==0 ){
262
+ const char *zPikchr = blob_str(&in);
263
+ int w = 0;
264
+ int h = 0;
265
+ char *zOut = pikchr(zPikchr, "pikchr", 0, &w, &h);
266
+ if( w>0 ){
267
+ blob_appendf(pOut,
268
+ "<div class=\"pikchr-svg\" style=\"max-width:%dpx\">", w);
269
+ blob_append(pOut, zOut, -1);
270
+ blob_append_literal(pOut, "</div>");
271
+ }else{
272
+ blob_append_literal(pOut, "<pre class='error'>");
273
+ htmlize_to_blob(pOut, zOut, -1);
274
+ blob_append_literal(pOut, "</pre>");
275
+ }
276
+ free(zOut);
277
+ }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){
278
+ blob_append_literal(pOut, "<pre class='textPlain'>");
279
+ htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
280
+ blob_append_literal(pOut, "</pre>");
281
+ }else{
282
+ blob_append_literal(pOut, "<pre class='textPlain'>");
283
+ htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
284
+ blob_append_literal(pOut, "</pre>");
285
+ }
286
+ blob_reset(&in);
287
+}
237288
238289
/*
239290
** WEBPAGE: md_rules
240291
**
241292
** Show a summary of the Markdown wiki formatting rules.
@@ -2615,61 +2666,10 @@
26152666
if( g.perm.WrWiki && (mFlags & WIKIASSOC_MENU_WRITE)!=0 ){
26162667
style_submenu_element("Edit Wiki", "%R/wikiedit?name=%s/%t", zPrefix, zName);
26172668
}
26182669
}
26192670
2620
-/*
2621
-** Render wiki/markdown/plaintext content into an output blob as HTML.
2622
-*/
2623
-void wiki_convert_to_html(
2624
- Blob *pOut,
2625
- const char *zMimetype,
2626
- const char *zContent,
2627
- int eDocSrc
2628
-){
2629
- Blob in;
2630
- if( pOut==0 ) return;
2631
- if( zContent==0 || zContent[0]==0 ){
2632
- blob_append_literal(pOut, "<i>Deleted</i>");
2633
- return;
2634
- }
2635
- blob_init(&in, 0, 0);
2636
- blob_append(&in, zContent, -1);
2637
- safe_html_context(eDocSrc);
2638
- if( zMimetype==0 || fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){
2639
- wiki_convert(&in, pOut, 0);
2640
- }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
2641
- markdown_to_html(&in, 0, pOut);
2642
- safe_html(pOut);
2643
- }else if( fossil_strcmp(zMimetype, "text/x-pikchr")==0 ){
2644
- const char *zPikchr = blob_str(&in);
2645
- int w = 0;
2646
- int h = 0;
2647
- char *zOut = pikchr(zPikchr, "pikchr", 0, &w, &h);
2648
- if( w>0 ){
2649
- blob_appendf(pOut,
2650
- "<div class=\"pikchr-svg\" style=\"max-width:%dpx\">", w);
2651
- blob_append(pOut, zOut, -1);
2652
- blob_append_literal(pOut, "</div>");
2653
- }else{
2654
- blob_append_literal(pOut, "<pre class='error'>");
2655
- htmlize_to_blob(pOut, zOut, -1);
2656
- blob_append_literal(pOut, "</pre>");
2657
- }
2658
- free(zOut);
2659
- }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){
2660
- blob_append_literal(pOut, "<pre class='textPlain'>");
2661
- htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
2662
- blob_append_literal(pOut, "</pre>");
2663
- }else{
2664
- blob_append_literal(pOut, "<pre class='textPlain'>");
2665
- htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
2666
- blob_append_literal(pOut, "</pre>");
2667
- }
2668
- blob_reset(&in);
2669
-}
2670
-
26712671
/*
26722672
** Render technote content into an output blob as HTML.
26732673
** Return the technote id. The caller must free the result.
26742674
*/
26752675
char *technote_render_to_html(Blob *pOut, int rid){
26762676
--- src/wiki.c
+++ src/wiki.c
@@ -232,10 +232,61 @@
232 @ <pre class='textPlain'>
233 @ %h(blob_str(pWiki))
234 @ </pre>
235 }
236 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
238 /*
239 ** WEBPAGE: md_rules
240 **
241 ** Show a summary of the Markdown wiki formatting rules.
@@ -2615,61 +2666,10 @@
2615 if( g.perm.WrWiki && (mFlags & WIKIASSOC_MENU_WRITE)!=0 ){
2616 style_submenu_element("Edit Wiki", "%R/wikiedit?name=%s/%t", zPrefix, zName);
2617 }
2618 }
2619
2620 /*
2621 ** Render wiki/markdown/plaintext content into an output blob as HTML.
2622 */
2623 void wiki_convert_to_html(
2624 Blob *pOut,
2625 const char *zMimetype,
2626 const char *zContent,
2627 int eDocSrc
2628 ){
2629 Blob in;
2630 if( pOut==0 ) return;
2631 if( zContent==0 || zContent[0]==0 ){
2632 blob_append_literal(pOut, "<i>Deleted</i>");
2633 return;
2634 }
2635 blob_init(&in, 0, 0);
2636 blob_append(&in, zContent, -1);
2637 safe_html_context(eDocSrc);
2638 if( zMimetype==0 || fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){
2639 wiki_convert(&in, pOut, 0);
2640 }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
2641 markdown_to_html(&in, 0, pOut);
2642 safe_html(pOut);
2643 }else if( fossil_strcmp(zMimetype, "text/x-pikchr")==0 ){
2644 const char *zPikchr = blob_str(&in);
2645 int w = 0;
2646 int h = 0;
2647 char *zOut = pikchr(zPikchr, "pikchr", 0, &w, &h);
2648 if( w>0 ){
2649 blob_appendf(pOut,
2650 "<div class=\"pikchr-svg\" style=\"max-width:%dpx\">", w);
2651 blob_append(pOut, zOut, -1);
2652 blob_append_literal(pOut, "</div>");
2653 }else{
2654 blob_append_literal(pOut, "<pre class='error'>");
2655 htmlize_to_blob(pOut, zOut, -1);
2656 blob_append_literal(pOut, "</pre>");
2657 }
2658 free(zOut);
2659 }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){
2660 blob_append_literal(pOut, "<pre class='textPlain'>");
2661 htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
2662 blob_append_literal(pOut, "</pre>");
2663 }else{
2664 blob_append_literal(pOut, "<pre class='textPlain'>");
2665 htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
2666 blob_append_literal(pOut, "</pre>");
2667 }
2668 blob_reset(&in);
2669 }
2670
2671 /*
2672 ** Render technote content into an output blob as HTML.
2673 ** Return the technote id. The caller must free the result.
2674 */
2675 char *technote_render_to_html(Blob *pOut, int rid){
2676
--- src/wiki.c
+++ src/wiki.c
@@ -232,10 +232,61 @@
232 @ <pre class='textPlain'>
233 @ %h(blob_str(pWiki))
234 @ </pre>
235 }
236 }
237
238 /*
239 ** Render wiki/markdown/plaintext content into an output blob as HTML.
240 */
241 void wiki_convert_to_html(
242 Blob *pOut,
243 const char *zMimetype,
244 const char *zContent,
245 int eDocSrc
246 ){
247 Blob in;
248 if( pOut==0 ) return;
249 if( zContent==0 || zContent[0]==0 ){
250 blob_append_literal(pOut, "<i>Deleted</i>");
251 return;
252 }
253 blob_init(&in, 0, 0);
254 blob_append(&in, zContent, -1);
255 safe_html_context(eDocSrc);
256 if( zMimetype==0 || fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){
257 wiki_convert(&in, pOut, 0);
258 }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){
259 markdown_to_html(&in, 0, pOut);
260 safe_html(pOut);
261 }else if( fossil_strcmp(zMimetype, "text/x-pikchr")==0 ){
262 const char *zPikchr = blob_str(&in);
263 int w = 0;
264 int h = 0;
265 char *zOut = pikchr(zPikchr, "pikchr", 0, &w, &h);
266 if( w>0 ){
267 blob_appendf(pOut,
268 "<div class=\"pikchr-svg\" style=\"max-width:%dpx\">", w);
269 blob_append(pOut, zOut, -1);
270 blob_append_literal(pOut, "</div>");
271 }else{
272 blob_append_literal(pOut, "<pre class='error'>");
273 htmlize_to_blob(pOut, zOut, -1);
274 blob_append_literal(pOut, "</pre>");
275 }
276 free(zOut);
277 }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){
278 blob_append_literal(pOut, "<pre class='textPlain'>");
279 htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
280 blob_append_literal(pOut, "</pre>");
281 }else{
282 blob_append_literal(pOut, "<pre class='textPlain'>");
283 htmlize_to_blob(pOut, blob_str(&in), blob_size(&in));
284 blob_append_literal(pOut, "</pre>");
285 }
286 blob_reset(&in);
287 }
288
289 /*
290 ** WEBPAGE: md_rules
291 **
292 ** Show a summary of the Markdown wiki formatting rules.
@@ -2615,61 +2666,10 @@
2666 if( g.perm.WrWiki && (mFlags & WIKIASSOC_MENU_WRITE)!=0 ){
2667 style_submenu_element("Edit Wiki", "%R/wikiedit?name=%s/%t", zPrefix, zName);
2668 }
2669 }
2670
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2671 /*
2672 ** Render technote content into an output blob as HTML.
2673 ** Return the technote id. The caller must free the result.
2674 */
2675 char *technote_render_to_html(Blob *pOut, int rid){
2676

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button