質問

Objective-CでCocoaアプリケーションを作成していますが、Markdownを組み込むことができます。ユーザーは、Markdown構文でテキストを入力し、「エクスポート」をクリックします。ボタンをクリックすると、プログラムはXHTMLのファイルを出力します。

しかし、多くのオプションがあるようです。 C / C ++実装のいずれかを使用できます。 PerlスクリプトをCocoaアプリのリソースとして実行、Python実装とPyObjCブリッジまたはPerl実装およびCamelBonesまたはPerlObjCブリッジ。最も簡単で簡単な解決策は何でしょうか?スレッドを必要とするリアルタイムレンダリングプレビューのような複雑なことはしていません。

役に立ちましたか?

解決

あなたが書いたオープンソースアプリ Macdown をチェックアウトすることをお勧めします Markdownlive )。この機能を2つのアプリの唯一の目的として組み込んでいます。

他のヒント

さまざまなオプションを見て、最終的に libsoldout を見つけました。統合が非常に簡単な非常に小さなC実装。 Xcodeプロジェクトにarray。[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サポートを含む Sundownの実装を使用したところ、大成功を収めました。テストアプリの構築に約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);
}

これらのCベースのライブラリで大量のマークダウンを処理する際に問題が見つかりました。

ここで私のために働いた非常にシンプルなObj-Cライブラリがあります:

https://github.com/mdiep/MMMarkdown


MMMarkdownを使用する手順:

  1. OS XまたはiOSターゲットをビルド

  2. include / MMMarkdown.h と次のいずれかをコピーします lib / libMMMarkdown-Mac.a または lib / libMMMarkdown-iOS.a をプロジェクトに追加

  3. コードは次のとおりです。

#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-markdown を使用しました。元のperlよりもはるかに高速で、有効にした場合、いくつかの構文拡張を処理します。

  1. Oliver Lettererの GHMarkdownParser は、マークダウンをHTMLに変換します。
  2. Phil Tolandの QLMarkdown マークダウンファイル用のQuickLookジェネレーター
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top