markdown: add some helpers for counting markdown words
Will use this in the new word counter
This commit is contained in:
@@ -666,3 +666,35 @@ struct NoteContentView_Previews: PreviewProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func count_words(_ s: String) -> Int {
|
||||||
|
return s.components(separatedBy: .whitespacesAndNewlines).count
|
||||||
|
}
|
||||||
|
|
||||||
|
func count_inline_nodes_words(nodes: [InlineNode]) -> Int {
|
||||||
|
return nodes.reduce(0) { words, node in
|
||||||
|
switch node {
|
||||||
|
case .text(let words):
|
||||||
|
return count_words(words)
|
||||||
|
case .emphasis(let children):
|
||||||
|
return words + count_inline_nodes_words(nodes: children)
|
||||||
|
case .strong(let children):
|
||||||
|
return words + count_inline_nodes_words(nodes: children)
|
||||||
|
case .strikethrough(let children):
|
||||||
|
return words + count_inline_nodes_words(nodes: children)
|
||||||
|
case .softBreak, .lineBreak, .code, .html, .image, .link:
|
||||||
|
return words
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func count_markdown_words(blocks: [BlockNode]) -> Int {
|
||||||
|
return blocks.reduce(0) { words, block in
|
||||||
|
switch block {
|
||||||
|
case .paragraph(let content):
|
||||||
|
return words + count_inline_nodes_words(nodes: content)
|
||||||
|
case .blockquote, .bulletedList, .numberedList, .taskList, .codeBlock, .htmlBlock, .heading, .table, .thematicBreak:
|
||||||
|
return words
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user