Markdown for Cocoa应用程序的最简单实现是什么?

时间:2009-09-16 20:30:15

标签: objective-c cocoa perl markdown

我正在Objective-C中编写一个Cocoa应用程序,我希望能够合并Markdown。用户将以Markdown语法输入文本,单击“导出”按钮,程序将输出XHTML文件。

但似乎有很多选择。我可以使用其中一个C/C++ implementations,我可以run the Perl script as a resource to my Cocoa app,我假设可以使用Python实现和PyObjC桥接器或Perl实现以及CamelBones或PerlObjC桥接器。什么是最简单,最简单的解决方案?我没有做任何复杂的事情,比如需要线程化的实时渲染预览。

6 个答案:

答案 0 :(得分:32)

我查看了各种选项,最后发现了libsoldout,这是一个非常小的C实现,很容易集成。你只需要在你的Xcode项目中包含数组。[ch],buffer。[ch],markdown。[ch]和渲染器。[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);

答案 1 :(得分:19)

我刚刚在iPad应用程序中使用了包含SmartyPants支持的Sundown implementation并取得了巨大成功。花了大约15分钟来构建测试应用程序。

假设你有一个UITextView * textView(你设置了deDegate: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);
}

答案 2 :(得分:16)

您可能需要查看我编写的开源应用Macdown(或者租用@ {3}}),它将此功能作为两个应用的唯一目的。

答案 3 :(得分:7)

我发现使用这些基于C的库处理大量降价问题。

这里有一个非常简单的Obj-C库,对我有用:

https://github.com/mdiep/MMMarkdown


使用MMMarkdown的步骤:

  1. 构建OS X或iOS目标

  2. 复制include/MMMarkdown.h和其中之一 lib/libMMMarkdown-Mac.alib/libMMMarkdown-iOS.a进入您的项目

  3. 然后代码是:

  4. #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>"
    

答案 4 :(得分:1)

我使用过peg-markdown,它比原始perl快得多,如果你启用它们可以处理一些语法扩展。

答案 5 :(得分:0)

  1. Oliver Letterer GHMarkdownParser将HTML标记下载。
  2. Phil Toland用于降价文件的QLMarkdown QuickLook生成器。