Domanda

Sto scrivendo un'applicazione Cocoa in Objective-C e vorrei essere in grado di incorporare Markdown. L'utente inserirà il testo nella sintassi Markdown, farà clic su " export " e il programma genererà un file di XHTML.

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

È stato utile?

Soluzione

Potresti voler dare un'occhiata all'app open-source Macdown che ho scritto (o in alternativa di Rentzsch Markdownlive ), che incorporano questa funzionalità come unico scopo delle due app.

Altri suggerimenti

Ho dato un'occhiata alle varie opzioni e alla fine ho trovato libsoldout , un implementazione C molto piccola che è abbastanza facile da integrare. Devi solo includere array. [Ch], buffer. [Ch], markdown. [Ch] e renderer. [Ch] nel tuo progetto Xcode, quindi puoi convertire un 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 Implementazione del tramonto che include il supporto SmartyPants, in un'app per iPad con grande successo. Ci sono voluti circa 15 minuti per creare un'app di prova.

Supponi di avere un UITextView * textView (che hai impostatoDelegate: self) e anche un UIWebView * webView 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 riscontrato 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. Crea il target OS X o iOS

  2. Copia include / MMMarkdown.h e entrambi 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 @"<h1>Example</h1>\n<p>What a library!</p>"

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

  1. GHMarkdownParser di Oliver Letterer traducono markdown in HTML.
  2. QLMarkdown di QuickLook di Phil Toland per i file di markdown.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top