Какая простейшая реализация Markdown для приложения Какао? - PullRequest
23 голосов
/ 17 сентября 2009

Я пишу приложение Какао в Objective-C, и я хотел бы иметь возможность включить Markdown. Пользователь вводит текст в синтаксисе Markdown, нажимает кнопку «экспорт», и программа выводит файл XHTML.

Похоже, вариантов много. Я мог бы использовать одну из C / C ++ реализаций , я мог запустить скрипт Perl в качестве ресурса для моего приложения Cocoa , я полагаю, мог бы использовать реализацию Python и мост PyObjC или Реализация Perl и мосты CamelBones или PerlObjC. Что было бы самым простым и легким решением? Я не делаю ничего сложного, например, рендеринга в реальном времени, который потребовал бы многопоточности.

Ответы [ 6 ]

32 голосов
/ 14 января 2011

Я рассмотрел различные варианты и в итоге нашел libsoldout , очень маленькую реализацию на C, которую довольно легко интегрировать. Вам просто нужно включить массив. [Ch], buffer. [Ch], markdown. [Ch] и renderers. [Ch] в ваш проект Xcode, тогда вы можете преобразовать NSString из уценки в HTML следующим образом:

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);
19 голосов
/ 23 октября 2011

Я только что с большим успехом использовал реализацию Sundown , которая включает поддержку SmartyPants, в приложении для iPad. На создание тестового приложения ушло около 15 минут.

Предположим, у вас есть UITextView * textView (который вы установили Deelegate: self), а также UIWebView * webView, в котором отображаются результаты:

- (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);
}
16 голосов
/ 17 сентября 2009

Вы можете проверить приложение с открытым исходным кодом Macdown , которое я написал (или, альтернативно, Markdownlive * Rentzsch ), которое включает эту функцию в качестве единственной цели двух приложений.

7 голосов
/ 07 ноября 2013

Я обнаружил проблемы с обработкой большого количества уценок с помощью этих библиотек на основе С.

Здесь есть очень простая библиотека Obj-C, которая работает для меня:

https://github.com/mdiep/MMMarkdown


Порядок использования MMMarkdown:

  1. Создание целевого объекта OS X или iOS

  2. Копировать include/MMMarkdown.h и любой lib/libMMMarkdown-Mac.a или lib/libMMMarkdown-iOS.a в ваш проект

  3. Тогда код:

#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>"
1 голос
/ 04 октября 2009

Я использовал peg-markdown , он намного быстрее оригинального perl и может обрабатывать несколько расширений синтаксиса, если вы их включите.

0 голосов
/ 27 декабря 2012
  1. Оливер Леттерер GHMarkdownParser переводит уценку в HTML.
  2. Фил Толанд QLMarkdown Генератор QuickLook для файлов уценки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...