Подтвердить что ты не робот

Какова самая простая реализация Markdown для приложения Cocoa?

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

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

4b9b3361

Ответ 1

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

Ответ 2

Я просмотрел различные варианты и в конце нашел 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);

Ответ 3

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

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

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

Ответ 4

Я нашел проблемы с обработкой больших объемов уценки с этими библиотеками на основе C.

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

https://github.com/mdiep/MMMarkdown


Шаги по использованию MMMarkdown:

  • Создайте цель OS X или iOS

  • Скопируйте include/MMMarkdown.h и либо lib/libMMMarkdown-Mac.a или lib/libMMMarkdown-iOS.a в ваш проект

  • Тогда код:

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

Ответ 5

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

Ответ 6

  • Oliver Letterer GHMarkdownParser перевести уценку на HTML.
  • Фил Толанд QLMarkdown Генератор QuickLook для файлов разметки.