objective-c cocoa perl markdown

objective c - ¿Cuál es la implementación más simple de Markdown para una aplicación Cocoa?



objective-c perl (6)

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 el botón "exportar" y el programa generará un archivo de XHTML.

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



Acabo de utilizar la implementación de Sundown, que incluye la compatibilidad con SmartyPants, en una aplicación de iPad con gran éxito. Tomó alrededor de 15 minutos para construir una aplicación de prueba.

Supongamos que tiene un UITExtView * textView (que estableceDelegate: 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. Construye el objetivo OS X o iOS

  2. Copia include/MMMarkdown.h y lib/libMMMarkdown-Mac.a o lib/libMMMarkdown-iOS.a en tu 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>"


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


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


libsoldout un vistazo a las diversas opciones y al final encontré libsoldout , una implementación de C muy pequeña que es bastante fácil de integrar. Solo tiene que incluir array. [Ch], buffer. [Ch], markdown. [Ch] y renderers. [Ch] en su proyecto de Xcode, luego puede convertir un NSString de markdown a HTML de esta forma:

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