Fossil SCM
Enhancements to wiki MIME types supported for the JSON API.
Commit
ce8937facc63cdfe8e9f969398a6c61e19acef29
Parent
b2d51b1b226d2a5…
1 file changed
+19
-1
+19
-1
| --- src/json_wiki.c | ||
| +++ src/json_wiki.c | ||
| @@ -115,12 +115,30 @@ | ||
| 115 | 115 | if( contentFormat>0 ){/*HTML-ize it*/ |
| 116 | 116 | Blob content = empty_blob; |
| 117 | 117 | Blob raw = empty_blob; |
| 118 | 118 | zFormat = "html"; |
| 119 | 119 | if(zBody && *zBody){ |
| 120 | + const char *zMimetype = pWiki->zMimetype; | |
| 121 | + if( zMimetype==0 ) zMimetype = "text/plain"; | |
| 122 | + zMimetype = wiki_filter_mimetypes(zMimetype); | |
| 120 | 123 | blob_append(&raw,zBody,-1); |
| 121 | - wiki_convert(&raw,&content,0); | |
| 124 | + if( fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){ | |
| 125 | + wiki_convert(&raw,&content,0); | |
| 126 | + }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){ | |
| 127 | + markdown_to_html(&raw,0,&content); | |
| 128 | + }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){ | |
| 129 | + htmlize_to_blob(&content,blob_str(&raw),blob_size(&raw)); | |
| 130 | + }else{ | |
| 131 | + json_set_err( FSL_JSON_E_UNKNOWN, | |
| 132 | + "Unsupported MIME type '%s' for wiki page '%s'.", | |
| 133 | + zMimetype, pWiki->zWikiTitle ); | |
| 134 | + blob_reset(&content); | |
| 135 | + blob_reset(&raw); | |
| 136 | + cson_free_object(pay); | |
| 137 | + manifest_destroy(pWiki); | |
| 138 | + return NULL; | |
| 139 | + } | |
| 122 | 140 | len = (unsigned int)blob_size(&content); |
| 123 | 141 | } |
| 124 | 142 | cson_object_set(pay,"size",json_new_int((cson_int_t)len)); |
| 125 | 143 | cson_object_set(pay,"content", |
| 126 | 144 | cson_value_new_string(blob_buffer(&content),len)); |
| 127 | 145 |
| --- src/json_wiki.c | |
| +++ src/json_wiki.c | |
| @@ -115,12 +115,30 @@ | |
| 115 | if( contentFormat>0 ){/*HTML-ize it*/ |
| 116 | Blob content = empty_blob; |
| 117 | Blob raw = empty_blob; |
| 118 | zFormat = "html"; |
| 119 | if(zBody && *zBody){ |
| 120 | blob_append(&raw,zBody,-1); |
| 121 | wiki_convert(&raw,&content,0); |
| 122 | len = (unsigned int)blob_size(&content); |
| 123 | } |
| 124 | cson_object_set(pay,"size",json_new_int((cson_int_t)len)); |
| 125 | cson_object_set(pay,"content", |
| 126 | cson_value_new_string(blob_buffer(&content),len)); |
| 127 |
| --- src/json_wiki.c | |
| +++ src/json_wiki.c | |
| @@ -115,12 +115,30 @@ | |
| 115 | if( contentFormat>0 ){/*HTML-ize it*/ |
| 116 | Blob content = empty_blob; |
| 117 | Blob raw = empty_blob; |
| 118 | zFormat = "html"; |
| 119 | if(zBody && *zBody){ |
| 120 | const char *zMimetype = pWiki->zMimetype; |
| 121 | if( zMimetype==0 ) zMimetype = "text/plain"; |
| 122 | zMimetype = wiki_filter_mimetypes(zMimetype); |
| 123 | blob_append(&raw,zBody,-1); |
| 124 | if( fossil_strcmp(zMimetype, "text/x-fossil-wiki")==0 ){ |
| 125 | wiki_convert(&raw,&content,0); |
| 126 | }else if( fossil_strcmp(zMimetype, "text/x-markdown")==0 ){ |
| 127 | markdown_to_html(&raw,0,&content); |
| 128 | }else if( fossil_strcmp(zMimetype, "text/plain")==0 ){ |
| 129 | htmlize_to_blob(&content,blob_str(&raw),blob_size(&raw)); |
| 130 | }else{ |
| 131 | json_set_err( FSL_JSON_E_UNKNOWN, |
| 132 | "Unsupported MIME type '%s' for wiki page '%s'.", |
| 133 | zMimetype, pWiki->zWikiTitle ); |
| 134 | blob_reset(&content); |
| 135 | blob_reset(&raw); |
| 136 | cson_free_object(pay); |
| 137 | manifest_destroy(pWiki); |
| 138 | return NULL; |
| 139 | } |
| 140 | len = (unsigned int)blob_size(&content); |
| 141 | } |
| 142 | cson_object_set(pay,"size",json_new_int((cson_int_t)len)); |
| 143 | cson_object_set(pay,"content", |
| 144 | cson_value_new_string(blob_buffer(&content),len)); |
| 145 |