diff --git a/Sources/PerfectMarkdown/PerfectMarkdown.swift b/Sources/PerfectMarkdown/PerfectMarkdown.swift index 6878d6e..b83eb42 100644 --- a/Sources/PerfectMarkdown/PerfectMarkdown.swift +++ b/Sources/PerfectMarkdown/PerfectMarkdown.swift @@ -27,15 +27,16 @@ import upskirt extension String { /// parse a Markdown string into an HTML one, return nil if failed public var markdownToHTML: String? { get { + let terminated = self + "\0" let OUTPUT_UNIT = 64 - let size = self.utf8.count + let size = terminated.utf8.count let enabled_extensions = MKDEXT_TABLES.rawValue | MKDEXT_FENCED_CODE.rawValue | MKDEXT_EMAIL_FRIENDLY.rawValue let render_flags:UInt32 = 0 // HTML_SKIP_HTML | HTML_SKIP_STYLE | HTML_HARD_WRAP; guard let ib = sd_bufnew(size) else { return nil }//end guard let _ = sd_bufgrow(ib, size) - ib.pointee.size = self.withCString { ptr->Int in + ib.pointee.size = terminated.withCString { ptr->Int in memcpy(ib.pointee.data, ptr, size) return size }//end markdown diff --git a/Tests/PerfectMarkdownTests/PerfectMarkdownTests.swift b/Tests/PerfectMarkdownTests/PerfectMarkdownTests.swift index 809a44d..e4c7423 100644 --- a/Tests/PerfectMarkdownTests/PerfectMarkdownTests.swift +++ b/Tests/PerfectMarkdownTests/PerfectMarkdownTests.swift @@ -2,19 +2,58 @@ import XCTest @testable import PerfectMarkdown class PerfectMarkdownTests: XCTestCase { - func testExample() { - let markdown = "# Swift调用C语言自建函数库的方法\n\n本程序示范了如何用Swift调用自定义C语言模块的方法。您可以直接下载本程序,或者按照以下教程逐步完成。\n\n## 快速上手\n\n本程序需要Swift 3.0以上版本。\n\n### 下载、编译和测试\n\n```\n$ git clone https://github.com/RockfordWei/CSwift.git\n$ cd CSwift\n$ swift build\n$ swift test\n```\n\n### Module Map\n\n下一步是修理一下目标的模块映射表。请把module.modulemap修改为如下程序:\n\n``` swift\nmodule CSwift [system] {\n\theader \"CSwift.h\"\n\tlink \"CSwift\"\n\texport *\n}\n```\n\n## 其他\n\nNumber|Name|Date\n------|----|----\n1|CSwift|Mar 7, 2017\n2|SunDown文本处理器|2017年3月7日\n\n" - guard let html = markdown.markdownToHTML else { - XCTFail("fault") - return - }//end guard - print(html) - } - + func testTitle () { + XCTAssertEqual( + "# 标题1\n## 标题2\n### 标题3\n".markdownToHTML ?? "", + "
" + ) + } + func testList () { + XCTAssertEqual( + "- 列表1\n- 列表2\n- 列表3\n\n".markdownToHTML ?? "", + "
" + ) + } + func testNumbers () { + XCTAssertEqual( + "1. 清单1\n2. 清单2\n3. 清单3\n\n".markdownToHTML ?? "", + "
" + ) + } + func testInlineCode () { + XCTAssertEqual( + "`let x = \"🇨🇳🇨🇦\"`\n".markdownToHTML ?? "", + "
let x = "🇨🇳🇨🇦"
\n"
+ )
+ }
+ func testCodes () {
+ XCTAssertEqual(
+ "```\nlet x = \"🇨🇳🇨🇦\"\nlet y = 100\n```\n".markdownToHTML ?? "",
+ "
let x = "🇨🇳🇨🇦"\nlet y = 100\n
\n\n" + ) + } + func testLink () { + XCTAssertEqual( + "[Perfect 官网](http://www.perfect.org)\n".markdownToHTML ?? "", + "
Perfect 官网\n" + ) + } + func testTable() { + let a = "Number|Name|Date\n------|----|----\n1|CSwift|Mar 7, 2017\n2|SunDown文本处理器|2017年3月7日\n\n".markdownToHTML ?? "" + let b = "
Number | \nName | \nDate | \n
---|---|---|
1 | \n" + + "CSwift | \nMar 7, 2017 | \n
2 | \nSunDown文本处理器 | \n2017年3月7日 | \n
" + XCTAssertEqual( a, b) + } static var allTests : [(String, (PerfectMarkdownTests) -> () throws -> Void)] { return [ - ("testExample", testExample), + ("testTitle", testTitle), + ("testList", testList), + ("testNumbers", testNumbers), + ("testInlineCode", testInlineCode), + ("testCodes", testCodes), + ("testLink", testLink), + ("testTable", testTable) ] } }