Question

J'écris une application Cocoa dans Objective-C et j'aimerais pouvoir intégrer Markdown. L'utilisateur entrera le texte dans la syntaxe Markdown, cliquez sur un " export " bouton, et le programme produira un fichier XHTML.

Cependant, il semble y avoir beaucoup d'options. Je pourrais utiliser l’une des implémentations C / C ++ , je pourrais exécuter le script Perl en tant que ressource pour mon application Cocoa , je suppose que vous pouvez utiliser l'implémentation Python et le pont PyObjC ou Perl. mise en œuvre et les ponts CamelBones ou PerlObjC. Quelle serait la solution la plus simple et la plus facile? Je ne fais rien de compliqué comme un aperçu en temps réel qui nécessiterait un threading.

Était-ce utile?

La solution

Vous pouvez consulter l'application open-source Macdown que j'ai écrite (ou bien celle de rentzsch Markdownlive ), qui intègrent cette fonctionnalité dans le seul objectif des deux applications.

Autres conseils

J’ai jeté un coup d’œil aux différentes options et finalement trouvé libsoldout , un très petite implémentation C facile à intégrer. Vous devez simplement inclure tableau. [Ch], tampon. [Ch], markdown. [Ch] et rendus. [Ch] dans votre projet Xcode, vous pouvez ensuite convertir une chaîne NSString de markdown en HTML, comme suit:

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

Je viens d'utiliser la mise en œuvre de Sundown , qui inclut la prise en charge de SmartyPants, dans une application iPad qui connaît un franc succès. Il a fallu environ 15 minutes pour créer une application de test.

Supposons que vous avez un UITextView * textView (que vous définissezDelegate: self) et également un UIWebView * webView dans lequel afficher les résultats:

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

J'ai rencontré des problèmes lors du traitement de grandes quantités de démarques avec ces bibliothèques basées sur C.

Il existe une bibliothèque très simple Obj-C qui a fonctionné pour moi ici:

https://github.com/mdiep/MMMarkdown

Étapes à suivre pour utiliser MMMarkdown:

  1. Construisez la cible OS X ou iOS

  2. Copiez include / MMMarkdown.h et soit lib / libMMMarkdown-Mac.a ou lib / libMMMarkdown-iOS.a dans votre projet

  3. Le code est alors:

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

J'ai utilisé peg-markdown , il est beaucoup plus rapide que le fichier Perl d'origine et peut gérez quelques extensions de syntaxe si vous les activez.

  1. GHMarkdownParser traduire le markdown en HTML.
  2. Le générateur de QuickLook de QLMarkdown de Phil Toland
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top