Ответ 1
Возможно, вы захотите проверить приложение с открытым исходным кодом Macdown, которое я написал (или, альтернативно, rentzsch Markdownlive), которые включают эту функциональность в качестве единственной цели двух приложений.
Я пишу приложение Cocoa в Objective-C, и я хотел бы иметь возможность включать Markdown. Пользователь вводит текст в синтаксисе Markdown, щелкает кнопку "экспорт", и программа выводит файл XHTML.
Похоже, что есть много вариантов. Я мог бы использовать одну из реализаций C/С++, я мог бы запустить Perl script как ресурс для моего приложения Cocoa, я предполагаю, что можно использовать реализацию Python и мост PyObjC или реализацию Perl, а также мосты CamelBones или PerlObjC. Какое будет самое простое и простое решение? Я не делаю ничего сложного, как предварительный просмотр в режиме реального времени, который потребует потоковой обработки.
Возможно, вы захотите проверить приложение с открытым исходным кодом Macdown, которое я написал (или, альтернативно, rentzsch Markdownlive), которые включают эту функциональность в качестве единственной цели двух приложений.
Я просмотрел различные варианты и в конце нашел 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);
Я просто использовал приложение 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);
}
Я нашел проблемы с обработкой больших объемов уценки с этими библиотеками на основе 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>"
Я использовал peg-markdown, он намного быстрее, чем исходный perl, и может обрабатывать несколько расширений синтаксиса, если вы их активируете.