CocoaアプリケーションのMarkdownの最も簡単な実装は何ですか?
-
07-07-2019 - |
質問
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を使用する手順:
-
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-markdown を使用しました。元のperlよりもはるかに高速で、有効にした場合、いくつかの構文拡張を処理します。
- Oliver Lettererの GHMarkdownParser は、マークダウンをHTMLに変換します。
- Phil Tolandの QLMarkdown マークダウンファイル用のQuickLookジェネレーター