Jaka jest najprostsza implementacja Markdown dla aplikacji Cocoa?

Piszę aplikację Cocoa w Objective-C i chciałbym móc włączyć Markdown. Użytkownik wprowadzi tekst w składni Markdown, kliknie przycisk "Eksportuj", a program wyświetli plik XHTML.

Wygląda na to, że jest wiele opcji. Mógłbym użyć jednej z implementacji C / C++ , mógłbym uruchomić skrypt Perla jako zasób do mojej aplikacji Cocoa , zakładam, że mógłbym użyć implementacji Pythona i Mostu PyObjC lub Perla implementacja i mosty CamelBones lub PerlObjC. Jakie byłoby najprostsze i najłatwiejsze rozwiązanie? Nie robię nic skomplikowanego, jak renderowany w czasie rzeczywistym podgląd, który wymagałby wątku.

Author: Community, 2009-09-17

6 answers

Możesz sprawdzić aplikację open-source Macdown, którą napisałem (lub alternatywnie rentzsch ' s Markdownlive), która zawiera tę funkcjonalność jako jedyny cel obu aplikacji.

 16
Author: Steven Degutis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 13:29:17

Spojrzałem na różne opcje i w końcu znalazłem libsoldout , bardzo małą implementację C, która jest dość łatwa do zintegrowania. Musisz tylko dołączyć tablicę.[ch], bufor.[ch], markdown.[ch], oraz rendery.[ch] w Twoim projekcie Xcode możesz przekonwertować NSString z markdown na HTML w następujący sposób:

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);
 32
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-04 17:40:55

Właśnie skorzystałem z implementacji Sundown , która obejmuje obsługę SmartyPants, w aplikacji na iPada z wielkim sukcesem. Zbudowanie aplikacji testowej zajęło około 15 minut.

Załóżmy, że masz UITextView * textView (który ustawiłeś jako self), a także UIWebView * webView, w którym wyświetlane są Wyniki:

- (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);
}
 19
Author: DreamTimeStudioZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-11 16:32:06

Znalazłem problemy z przetwarzaniem dużych ilości markdown za pomocą tych bibliotek opartych na C.

Jest bardzo prosta Biblioteka Obj-C, która działała dla mnie tutaj:

Https://github.com/mdiep/MMMarkdown


Kroki użycia MMMarkdown:

  1. Zbuduj docelowy system OS X lub iOS

  2. Kopia include/MMMarkdown.h i albo lib/libMMMarkdown-Mac.a lub lib/libMMMarkdown-iOS.a do twojego projektu

  3. Wtedy kod to:

#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>"
 7
Author: Diggory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 23:45:56

Użyłem peg-markdown, jest znacznie szybszy niż oryginalny perl i może obsłużyć kilka rozszerzeń składni, jeśli je włączysz.

 1
Author: Arthur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-04 00:18:20
  1. Oliver Letterer ' s GHMarkdownParser translate markdown to HTML.
  2. Phila Tolanda qlmarkdown QuickLook generator dla plików markdown.
 0
Author: Cfr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 13:32:11