mirror of
https://github.com/zhigang1992/GitHawk.git
synced 2026-04-30 04:54:57 +08:00
update cmark lib (#1708)
This commit is contained in:
2
Pods/Manifest.lock
generated
2
Pods/Manifest.lock
generated
@@ -142,7 +142,7 @@ EXTERNAL SOURCES:
|
||||
|
||||
CHECKOUT OPTIONS:
|
||||
cmark-gfm-swift:
|
||||
:commit: 7f604e31125983861076b9904fb3251d2fe41c47
|
||||
:commit: 307b5303a716ee3642f301891943f036537df1b1
|
||||
:git: https://github.com/GitHawkApp/cmark-gfm-swift.git
|
||||
ContextMenu:
|
||||
:commit: bac5362e41f9c0322f341b8cd9eb32992ea1d8fe
|
||||
|
||||
@@ -20,7 +20,7 @@ extension Block {
|
||||
return .text(text: [.code(text: text)])
|
||||
case .list(let items, let type):
|
||||
let deeper = level + 1
|
||||
return .list(children: items.flatMap { $0.listElements(deeper) }, type: type, level: deeper)
|
||||
return .list(children: items.compactMap { $0.listElements(deeper) }, type: type, level: deeper)
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,6 @@ extension Block {
|
||||
|
||||
extension Sequence where Iterator.Element == Block {
|
||||
func listElements(_ level: Int) -> [ListElement] {
|
||||
return flatMap { $0.listElement(level) }
|
||||
return compactMap { $0.listElement(level) }
|
||||
}
|
||||
}
|
||||
|
||||
4
Pods/cmark-gfm-swift/Source/Block+TableRow.swift
generated
4
Pods/cmark-gfm-swift/Source/Block+TableRow.swift
generated
@@ -16,8 +16,8 @@ extension Block {
|
||||
}
|
||||
var tableRow: TableRow? {
|
||||
switch self {
|
||||
case .tableRow(let items): return .row(cells: items.flatMap { $0.tableCell })
|
||||
case .tableHeader(let items): return .header(cells: items.flatMap { $0.tableCell })
|
||||
case .tableRow(let items): return .row(cells: items.compactMap { $0.tableCell })
|
||||
case .tableHeader(let items): return .header(cells: items.compactMap { $0.tableCell })
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,5 +17,5 @@ extension Block {
|
||||
}
|
||||
|
||||
extension Sequence where Iterator.Element == Block {
|
||||
var textElements: [[TextElement]] { return flatMap { $0.textElements } }
|
||||
var textElements: [[TextElement]] { return compactMap { $0.textElements } }
|
||||
}
|
||||
|
||||
10
Pods/cmark-gfm-swift/Source/Inline+TextElement.swift
generated
10
Pods/cmark-gfm-swift/Source/Inline+TextElement.swift
generated
@@ -14,12 +14,12 @@ extension Inline {
|
||||
case .softBreak: return .softBreak
|
||||
case .lineBreak: return .lineBreak
|
||||
case .code(let text): return .code(text: text)
|
||||
case .emphasis(let children): return .emphasis(children: children.flatMap { $0.textElement })
|
||||
case .strong(let children): return .strong(children: children.flatMap { $0.textElement })
|
||||
case .emphasis(let children): return .emphasis(children: children.compactMap { $0.textElement })
|
||||
case .strong(let children): return .strong(children: children.compactMap { $0.textElement })
|
||||
case .custom(let literal): return .text(text: literal)
|
||||
case .link(let children, let title, let url):
|
||||
return .link(children: children.flatMap { $0.textElement }, title: title, url: url)
|
||||
case .strikethrough(let children): return .strikethrough(children: children.flatMap { $0.textElement })
|
||||
return .link(children: children.compactMap { $0.textElement }, title: title, url: url)
|
||||
case .strikethrough(let children): return .strikethrough(children: children.compactMap { $0.textElement })
|
||||
case .mention(let login): return .mention(login: login)
|
||||
case .checkbox(let checked, let originalRange): return .checkbox(checked: checked, originalRange: originalRange)
|
||||
case .image, .html: return nil
|
||||
@@ -28,5 +28,5 @@ extension Inline {
|
||||
}
|
||||
|
||||
extension Sequence where Iterator.Element == Inline {
|
||||
var textElements: [TextElement] { return flatMap { $0.textElement } }
|
||||
var textElements: [TextElement] { return compactMap { $0.textElement } }
|
||||
}
|
||||
|
||||
37
Pods/cmark-gfm-swift/Source/Node+Elements.swift
generated
37
Pods/cmark-gfm-swift/Source/Node+Elements.swift
generated
@@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import cmark_gfm
|
||||
|
||||
struct FoldingOptions {
|
||||
var quoteLevel: Int
|
||||
@@ -27,7 +28,7 @@ extension Block {
|
||||
case .html(let text):
|
||||
return [.html(text: text)]
|
||||
case .list(let items, let type):
|
||||
return [.list(items: items.flatMap { $0.listElements(0) }, type: type)]
|
||||
return [.list(items: items.compactMap { $0.listElements(0) }, type: type)]
|
||||
case .paragraph(let text):
|
||||
let builder = InlineBuilder(options: options)
|
||||
text.forEach { $0.fold(builder: builder) }
|
||||
@@ -38,7 +39,7 @@ extension Block {
|
||||
}
|
||||
return els
|
||||
case .table(let items):
|
||||
return [.table(rows: items.flatMap { $0.tableRow })]
|
||||
return [.table(rows: items.compactMap { $0.tableRow })]
|
||||
case .tableHeader, .tableRow, .tableCell:
|
||||
return [] // handled in flattening .table
|
||||
case .thematicBreak:
|
||||
@@ -70,7 +71,7 @@ class InlineBuilder {
|
||||
}
|
||||
|
||||
extension Inline {
|
||||
/// Collapse all text elements, break by image and html elements
|
||||
/// Collapse all text elements, break by image elements
|
||||
func fold(builder: InlineBuilder) {
|
||||
switch self {
|
||||
case .text, .softBreak, .lineBreak, .code, .emphasis, .strong,
|
||||
@@ -82,16 +83,40 @@ extension Inline {
|
||||
if let title = title, let url = url {
|
||||
builder.pushNonText(.image(title: title, url: url))
|
||||
}
|
||||
case .html(let text):
|
||||
builder.pushNonText(.html(text: text))
|
||||
case .html:
|
||||
// handled by converting blocks containing html into full html elements
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extension Node {
|
||||
var containsHTML: Bool {
|
||||
if type == CMARK_NODE_HTML_BLOCK || type == CMARK_NODE_HTML_INLINE {
|
||||
return true
|
||||
}
|
||||
for child in children {
|
||||
if child.containsHTML { return true }
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
public extension Node {
|
||||
|
||||
var flatElements: [Element] {
|
||||
return elements.flatMap { $0.folded(FoldingOptions(quoteLevel: 0)) }
|
||||
let options = FoldingOptions(quoteLevel: 0)
|
||||
return children.reduce([Element]()) {
|
||||
if $1.containsHTML {
|
||||
return $0 + [.html(text: $1.html)]
|
||||
} else {
|
||||
if let block = Block($1) {
|
||||
return $0 + block.folded(options)
|
||||
} else {
|
||||
return $0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
14
Pods/cmark-gfm-swift/Source/SwiftAST.swift
generated
14
Pods/cmark-gfm-swift/Source/SwiftAST.swift
generated
@@ -99,7 +99,7 @@ extension Inline {
|
||||
guard let type = InlineType(rawValue: node.typeString) else {
|
||||
return nil
|
||||
}
|
||||
let inlineChildren = { node.children.flatMap(Inline.init) }
|
||||
let inlineChildren = { node.children.compactMap(Inline.init) }
|
||||
switch type {
|
||||
case .text:
|
||||
self = .text(text: node.literal!)
|
||||
@@ -136,8 +136,8 @@ extension Block {
|
||||
guard let type = BlockType(rawValue: node.typeString) else {
|
||||
return nil
|
||||
}
|
||||
let parseInlineChildren = { node.children.flatMap(Inline.init) }
|
||||
let parseBlockChildren = { node.children.flatMap(Block.init) }
|
||||
let parseInlineChildren = { node.children.compactMap(Inline.init) }
|
||||
let parseBlockChildren = { node.children.compactMap(Block.init) }
|
||||
switch type {
|
||||
case .paragraph:
|
||||
self = .paragraph(text: parseInlineChildren())
|
||||
@@ -145,7 +145,7 @@ extension Block {
|
||||
self = .blockQuote(items: parseBlockChildren())
|
||||
case .list:
|
||||
let type: ListType = node.listType == CMARK_BULLET_LIST ? .unordered : .ordered
|
||||
self = .list(items: node.children.flatMap { $0.listItem }, type: type)
|
||||
self = .list(items: node.children.compactMap { $0.listItem }, type: type)
|
||||
case .code_block:
|
||||
self = .codeBlock(text: node.literal!, language: node.fenceInfo)
|
||||
case .html_block:
|
||||
@@ -172,7 +172,7 @@ extension Node {
|
||||
var listItem: [Block]? {
|
||||
switch type {
|
||||
case CMARK_NODE_ITEM:
|
||||
return children.flatMap(Block.init)
|
||||
return children.compactMap(Block.init)
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
@@ -212,12 +212,12 @@ extension Node {
|
||||
/// The abstract syntax tree representation of a Markdown document.
|
||||
/// - returns: an array of block-level elements.
|
||||
public var elements: [Block] {
|
||||
return children.flatMap(Block.init)
|
||||
return children.compactMap(Block.init)
|
||||
}
|
||||
}
|
||||
|
||||
func tableOfContents(document: String) -> [Block] {
|
||||
let blocks = Node(markdown: document)?.children.flatMap(Block.init) ?? []
|
||||
let blocks = Node(markdown: document)?.children.compactMap(Block.init) ?? []
|
||||
return blocks.filter {
|
||||
switch $0 {
|
||||
case .heading(_, let level) where level < 3: return true
|
||||
|
||||
@@ -3,11 +3,7 @@
|
||||
|
||||
#include "core-extensions.h"
|
||||
|
||||
//extern cmark_node_type CMARK_NODE_CHECKBOX;
|
||||
cmark_syntax_extension *create_checkbox_extension(void);
|
||||
//int cmark_node_get_checkbox_checked(cmark_node *node);
|
||||
//int cmark_node_get_checkbox_location(cmark_node *node);
|
||||
//int cmark_node_get_checkbox_length(cmark_node *node);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
|
||||
#include "core-extensions.h"
|
||||
|
||||
//extern cmark_node_type CMARK_NODE_MENTION;
|
||||
cmark_syntax_extension *create_mention_extension(void);
|
||||
//const char *cmark_node_get_mention_login(cmark_node *node);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user