我正在Objective-C中编写一个Cocoa应用程序,我希望能够合并Markdown.用户将以Markdown语法输入文本,单击"导出"按钮,程序将输出XHTML文件.
但是,似乎有很多选择.我可以使用其中一个C/C++实现,我可以将Perl脚本作为资源运行到我的Cocoa应用程序,我假设可以使用Python实现和PyObjC桥接器或Perl实现以及CamelBones或PerlObjC桥接器.什么是最简单,最简单的解决方案?我没有做任何复杂的事情,比如需要线程的实时渲染预览.
我看了各种选项,最后找到了libsoldout,这是一个非常小的C实现,很容易集成.你只需要在你的Xcode项目中包含数组.[ch],buffer.[ch],markdown.[ch]和renderers.[ch],然后你就可以将NSString从markdown转换为HTML,如下所示:
NSString *rawMarkdown; const char * prose = [rawMarkdown UTF8String]; struct buf *ib, *ob; int length = rawMarkdown.length + 1; ib = bufnew(length); bufgrow(ib, length); memcpy(ib->data, prose, length); ib->size = length; ob = bufnew(64); markdown(ob, ib, &mkd_xhtml); NSString *shinyNewHTML = [NSString stringWithUTF8String: ob->data]; NSLog(@"%@", shinyNewHTML); bufrelease(ib); bufrelease(ob);
我刚刚在iPad应用程序中使用了包含SmartyPants支持的日落实现,并取得了巨大的成功.花了大约15分钟来构建一个测试应用程序.
假设你有一个UITextView*textView(你setDelegate:self),还有一个UIWebView*webView,用于显示结果:
- (void) textViewDidEndEditing:(UITextView *)textView { NSString *rawMarkdown = [textView text]; const char * prose = [rawMarkdown UTF8String]; struct buf *ib, *ob; int length = [rawMarkdown lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; ib = bufnew(length); bufgrow(ib, length); memcpy(ib->data, prose, length); ib->size = length; ob = bufnew(64); struct sd_callbacks callbacks; struct html_renderopt options; struct sd_markdown *markdown; sdhtml_renderer(&callbacks, &options, 0); markdown = sd_markdown_new(0, 16, &callbacks, &options); sd_markdown_render(ob, ib->data, ib->size, markdown); sd_markdown_free(markdown); NSString *shinyNewHTML = [NSString stringWithUTF8String: ob->data]; [webView loadHTMLString:shinyNewHTML baseURL:[[NSURL alloc] initWithString:@""]]; bufrelease(ib); bufrelease(ob); }
您可能想查看我编写的开源应用程序Macdown(或者rentzsch的Markdownlive),它将此功能作为两个应用程序的唯一目的.
我发现使用这些基于C的库处理大量降价问题.
这里有一个非常简单的Obj-C库,对我有用:
https://github.com/mdiep/MMMarkdown
使用MMMarkdown的步骤:
构建OS X或iOS目标
复制include/MMMarkdown.h
,要么
lib/libMMMarkdown-Mac.a
或lib/libMMMarkdown-iOS.a
到项目
然后代码是:
#import "MMMarkdown.h" NSError *error; NSString *markdown = @"# Example\nWhat a library!"; NSString *htmlString = [MMMarkdown HTMLStringWithMarkdown:markdown error:&error]; // Returns @"Example
\nWhat a library!
"