Qual è l’implementazione più semplice di Markdown per un’applicazione Cocoa?

Sto scrivendo un’applicazione Cocoa in Objective-C e mi piacerebbe essere in grado di incorporare Markdown. L’utente inserirà il testo nella syntax di Markdown, farà clic su un pulsante “esporta” e il programma genererà un file di XHTML.

Sembra che ci siano molte opzioni, però. Potrei usare una delle implementazioni C / C ++ , potrei eseguire lo script Perl come risorsa per la mia app Cocoa , presumo potrei usare l’implementazione Python e il bridge PyObjC o l’implementazione Perl e i bridge CamelBones o PerlObjC. Quale sarebbe la soluzione più semplice e più semplice? Non sto facendo nulla di complicato come un’anteprima di rendering in tempo reale che richiederebbe il threading.

Potresti voler controllare l’app open-source Macdown che ho scritto (o in alternativa Markdownlive di rentzsch), che incorpora questa funzionalità come unico scopo delle due app.

Ho dato un’occhiata alle varie opzioni e alla fine ho trovato libsoldout , un’implementazione C molto piccola che è abbastanza facile da integrare. Hai solo bisogno di includere array. [Ch], buffer. [Ch], markdown. [Ch] e renderers. [Ch] nel tuo progetto Xcode, quindi puoi convertire una NSString da markdown in HTML in questo modo:

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); 

Ho appena usato l’ implementazione di Sundown che include il supporto di SmartyPants, in un’app per iPad con grande successo. Ci sono voluti circa 15 minuti per build un’applicazione di test.

Si supponga di avere un UITextView * textView (che si impostaDelegate: self) e anche una webView di UIWebView * in cui visualizzare i risultati:

 - (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); } 

Ho trovato problemi con l’elaborazione di grandi quantità di markdown con queste librerie basate su C.

C’è una libreria Obj-C molto semplice che ha funzionato per me qui:

https://github.com/mdiep/MMMarkdown


Passaggi per utilizzare MMMarkdown:

  1. Costruisci il target OS X o iOS

  2. Copia include/MMMarkdown.h e lib/libMMMarkdown-Mac.a o lib/libMMMarkdown-iOS.a nel tuo progetto

  3. Quindi il codice è:

 #import "MMMarkdown.h" NSError *error; NSString *markdown = @"# Example\nWhat a library!"; NSString *htmlString = [MMMarkdown HTMLStringWithMarkdown:markdown error:&error]; // Returns @"

Example

\n

What a library!

"

Ho usato peg-markdown , è molto più veloce del perl originale e può gestire alcune estensioni di syntax se le abiliti.

  1. GHMarkdownParser di Oliver Letterer traduce markdown in HTML.
  2. Il generatore QLMarkdown QuickLook di Phil Toland per i file markdown .