From 1983ae0f481cf7b9aeda0153eb77b4ed287899b5 Mon Sep 17 00:00:00 2001 From: Gareth Simpson Date: Sat, 28 Jan 2023 08:01:37 +0000 Subject: [PATCH] This is a more conservative fix for #328 (#462) close #328 Having checked the markdown -> attributedtext conversion, lots of things I was escaping before are actually ingored. This change only escapes things that are definitely rendered and as far as I can tell doesn't break anything now. Test post to look at with maximal Markdown: https://mas.to/@elbrux/109743775703438333 --- Packages/Models/Sources/Models/Alias/HTMLString.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Packages/Models/Sources/Models/Alias/HTMLString.swift b/Packages/Models/Sources/Models/Alias/HTMLString.swift index 54dc33ba..4be1f339 100644 --- a/Packages/Models/Sources/Models/Alias/HTMLString.swift +++ b/Packages/Models/Sources/Models/Alias/HTMLString.swift @@ -4,7 +4,7 @@ import SwiftSoup import SwiftUI public struct HTMLString: Decodable, Equatable, Hashable { - public let htmlValue: String + public var htmlValue: String public let asMarkdown: String public let asRawText: String public let statusesURLs: [URL] @@ -18,6 +18,15 @@ public struct HTMLString: Decodable, Equatable, Hashable { htmlValue = "" } + // https://daringfireball.net/projects/markdown/syntax + // HTML2Markdown only auto escapes * on the way out + // so we pre-escape \ ` _ and [ as these are the only + // other characters the markdown parser used picks up + // when it renders to attributed text + if let regex = try? NSRegularExpression(pattern: "([\\_\\`\\[\\\\])", options: .caseInsensitive) { + htmlValue = regex.stringByReplacingMatches(in: htmlValue, options: [], range: NSRange(location: 0, length: htmlValue.count), withTemplate: "\\\\$1") + } + do { asMarkdown = try HTMLParser().parse(html: htmlValue) .toMarkdown()