Pregunta

Estoy escribiendo una aplicación Cocoa en Objective-C, y me gustaría poder incorporar Markdown. El usuario ingresará texto en la sintaxis de Markdown, haga clic en " exportar " botón, y el programa generará un archivo de XHTML.

Parece que hay muchas opciones, sin embargo. Podría usar una de las implementaciones C / C ++ , podría ejecutar el script Perl como recurso para mi aplicación Cocoa , supongo que podría usar la implementación de Python y el puente PyObjC o el Perl implementación y los puentes CamelBones o PerlObjC. ¿Cuál sería la solución más simple y fácil? No estoy haciendo nada complicado como una vista previa renderizada en tiempo real que requeriría subprocesos.

¿Fue útil?

Solución

Es posible que desee consultar la aplicación de código abierto Macdown que escribí (o alternativamente rentzsch's Markdownlive ), que incorporan esta funcionalidad como el único propósito de las dos aplicaciones.

Otros consejos

Eché un vistazo a las diversas opciones y al final encontré libsoldout , un Implementación C muy pequeña que es bastante fácil de integrar. Solo necesita incluir array. [Ch], buffer. [Ch], markdown. [Ch] y renderders. [Ch] en su proyecto Xcode, luego puede convertir un NSString de markdown a HTML así:

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

Acabo de utilizar la Implementación Sundown que incluye soporte para SmartyPants, en una aplicación de iPad con gran éxito. Tomó unos 15 minutos para crear una aplicación de prueba.

Suponga que tiene un UITextView * textView (que configuróDelegate: self) y también un UIWebView * webView en el que mostrar los resultados:

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

Encontré problemas al procesar grandes cantidades de rebajas con estas bibliotecas basadas en C.

Hay una biblioteca Obj-C muy simple que funcionó para mí aquí:

https://github.com/mdiep/MMMarkdown


Pasos para usar MMMarkdown:

  1. Cree el objetivo de OS X o iOS

  2. Copiar include / MMMarkdown.h y lib / libMMMarkdown-Mac.a o lib / libMMMarkdown-iOS.a en su proyecto

  3. Entonces el código es:

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

He usado peg-markdown , es mucho más rápido que el perl original y puede manejar algunas extensiones de sintaxis si las habilita.

  1. Oliver Letterer's GHMarkdownParser traduce la rebaja a HTML.
  2. QLMarkdown generador QuickLook de Phil Toland para archivos de rebajas.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top