Fossil SCM
Move wiki_convert_to_html closer to wiki_render_by_mimetype.
Commit
b78b4665b1cb7276fe1566fc7eff500c7fd587099d412fe4af46c210e3754a69
Parent
a24637996d9edc6…
1 file changed
+51
-51
+51
-51
| --- src/wiki.c | ||
| +++ src/wiki.c | ||
| @@ -232,10 +232,61 @@ | ||
| 232 | 232 | @ <pre class='textPlain'> |
| 233 | 233 | @ %h(blob_str(pWiki)) |
| 234 | 234 | @ </pre> |
| 235 | 235 | } |
| 236 | 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 | +} | |
| 237 | 288 | |
| 238 | 289 | /* |
| 239 | 290 | ** WEBPAGE: md_rules |
| 240 | 291 | ** |
| 241 | 292 | ** Show a summary of the Markdown wiki formatting rules. |
| @@ -2615,61 +2666,10 @@ | ||
| 2615 | 2666 | if( g.perm.WrWiki && (mFlags & WIKIASSOC_MENU_WRITE)!=0 ){ |
| 2616 | 2667 | style_submenu_element("Edit Wiki", "%R/wikiedit?name=%s/%t", zPrefix, zName); |
| 2617 | 2668 | } |
| 2618 | 2669 | } |
| 2619 | 2670 | |
| 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 | 2671 | /* |
| 2672 | 2672 | ** Render technote content into an output blob as HTML. |
| 2673 | 2673 | ** Return the technote id. The caller must free the result. |
| 2674 | 2674 | */ |
| 2675 | 2675 | char *technote_render_to_html(Blob *pOut, int rid){ |
| 2676 | 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 | ** 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 |