美文网首页iOSiOS开发-swift语言KungFuSwift
MarkNoteParser - 用Swift/Obj-c实现的

MarkNoteParser - 用Swift/Obj-c实现的

作者: MarkNote | 来源:发表于2015-10-26 22:28 被阅读1473次

    我用Obj-c和Swfit实现了一个简单的markdown解析器,源代码放在github上了。
    Objective-C 版本: https://github.com/marknote/MarkNoteParserObjC
    Swift 版本: https://github.com/marknote/MarknoteParser

    缘由

    我有一个小应用 MarkNote ,这是一个使用markdown语法来记笔记的小工具。
    最开始的时候, 我使用 marked 来把 markdown 渲染为HTML。marked使用起来简单。不过,一个native的应用居然用基于javascript的引擎来做解析,心里总觉得有点不爽 :)
    找了找没找到合适的
    基于Swfit/Object-c实现的 markdown解析起 , 我决定自己轮子一个。于是就有了这个项目。
    一开始我只是实现了Swfit版本,后来xcode升级到7.0之后,swift的应用文件生成很大,很多时候都大于40m(当然,app store最后会优化,尺寸大大减少)。于是觉得obj-c也很有必要,就又一口气撸了一个 obj-c版本的。

    使用方法

    swift 版本

    • 直接拷贝以下2个文件到你的工程中:
      -- StringExtensions.swift , String 类扩展;
      -- MarkNoteParser.swift, 这是解析器类;

    • 在你的代码中就直接可以调用 MarkNoteParser.toHtml() 把markdown文本转为HTML 字符, 用法如下:

    func markdown(input :String)->String{
            let result = MarkNoteParser.toHtml(input)
            println("input: \(input) result:\(result)")
            return result
        }
    

    objective-c 版本

    • 把 "MarkNoteParserOC" 目录下的所有文件拷贝到你的工程中 , 然后在你的代码中引入头文件:
    #import "MarkNoteParser.h"
    

    -然后你就可以使用 MarkNoteParser 来解析markdown了,示例如下:

    NSString* result = [MarkNoteParser toHtml:input];
    return result;
    

    特点

    标题支持

    # H1
    ## H2
    ### H3
    

    转换为:

    <h1>H1</h1><h2>H2</h2><h3>H3</h3>
    

    粗体斜体Emphasis支持

    Emphasis, aka italics, with *asterisks* or _underscores_.
    Strong emphasis, aka bold, with **asterisks** or __underscores__.
    Strikethrough uses two tildes. ~~Scratch this.~~
    

    转换为:

    <p>Emphasis, aka italics, with <em>asterisks</em> or <em>underscores</em>.<br/></p>
    <p>Strong emphasis, aka bold, with <strong>asterisks</strong> or <strong>underscores</strong>.<br/></p>
    <p>Strikethrough uses two tildes. <u>Scratch this.</u><br/></p>
    

    链接支持

    [I'm an inline-style link](https://www.google.com)
    [I'm an inline-style link with title](https://www.google.com "Google's Homepage")
    

    转换为:

    <p><a href="https://www.google.com">I'm an inline-style link</a><br/></p>
    <p><a href="https://www.google.com" title="Google's Homepage">I'm an inline-style link with title</a><br/></p>
    

    图片支持

    ![alt text](https://avatars3.githubusercontent.com/u/12975088?v=3&s=40 "Logo Title")
    

    转换为:

    <img src="https://avatars3.githubusercontent.com/u/12975088?v=3&s=40" title="Logo Title" alt="alt text" />
    

    代码支持

    <pre class="lang-markdown">

    var s = "JavaScript syntax highlighting";
    alert(s);
    

    </pre>

    转换为:

    <pre class="lang-javascript">
    var s = "JavaScript syntax highlighting";
    alert(s);
    </pre>
    

    表格支持

    | Tables        | Are           | Cool  |
    | ------------- |:-------------:| -----:|
    | col 3 is      | right-aligned | $1600 |
    | col 2 is      | centered      |   $12 |
    | zebra stripes | are neat      |    $1 |
    

    转换为:

    <table><tr><th> Tables        </th><th> Are           </th><th style="text-align: center;"> Cool </th></tr><tr><td> col 3 is      </td><td> right-aligned </td><td style="text-align: center;"> $1600 </td></tr><tr><td> col 2 is      </td><td> centered      </td><td style="text-align: center;">   $12 </td></tr><tr><td> zebra stripes </td><td> are neat      </td><td style="text-align: center;">    $1 </td></tr></table><p>The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.<br/></p>
    

    问题反馈

    如果你有任何问题或者建议,可以在这里给我反馈。谢谢!

    相关文章

      网友评论

      • 费曼先生的故事:感谢你的分享,阅读一下你的代码,学习学习
      • 阿炎:朋友,你marknote是怎么做的?我也想做一个,用来发布图文信息的,能不能指导指导?
        MarkNote:@阿炎 可以用marked js做解析https://github.com/chjj/marked 再找一个可视化的编辑器。 你也可以扒扒看简书的编辑页面看看。
        阿炎:@MarkNote 我不是oc也不是swift,我想直接嵌入手机网页使用!不知道有什么推荐的没?谢谢了!
        MarkNote:@阿炎 作为最关键的部件,我的解析器已经开源了啊,你只需要做UI包一下就好了。
      • 337736a7277f:好物,Star

      本文标题:MarkNoteParser - 用Swift/Obj-c实现的

      本文链接:https://www.haomeiwen.com/subject/wesxhttx.html