我正在写在Objective-C Cocoa应用程序中,我想能够纳入降价。 用户将在降价语法输入文字,单击“导出”按钮,程序会输出XHTML的文件。
好像有很多的选择,虽然。 我可以用一个C / C ++编译器 ,我可以作为资源运行Perl脚本,我的可可应用程序 ,我认为可以使用Python实现和PyObjC桥或Perl实现和CamelBones或PerlObjC桥梁。 什么是最简单和最简单的解决方案? 我没有做太多复杂的实时渲染预览会需要线程。
我正在写在Objective-C Cocoa应用程序中,我想能够纳入降价。 用户将在降价语法输入文字,单击“导出”按钮,程序会输出XHTML的文件。
好像有很多的选择,虽然。 我可以用一个C / C ++编译器 ,我可以作为资源运行Perl脚本,我的可可应用程序 ,我认为可以使用Python实现和PyObjC桥或Perl实现和CamelBones或PerlObjC桥梁。 什么是最简单和最简单的解决方案? 我没有做太多复杂的实时渲染预览会需要线程。
你可能想看看开源应用Macdown这是我写的(或可替代rentzsch的Markdownlive ),其中包含此功能的两个应用程序的唯一目的。
我看了一下各个选项,并在年底发现libsoldout ,一个非常小的C实现这很容易整合。 你只需要包括数组[CH],缓冲[CH],降价[CH]和渲染[CH]在您的Xcode项目,那么你可以从降价转换一个NSString为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应用取得了巨大成功。 大约过了15分钟,以建立一个测试应用程序。
假设你有一个UITextView *的TextView(你setDelegate:自我),也一个UIWebView * web视图中显示的结果:
- (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);
}
我发现的问题与处理大量与这些基于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 @"<h1>Example</h1>\n<p>What a library!</p>"
我用PEG-降价 ,这比原来的perl快得多,如果你让他们可以处理一些语法扩展。