Improve tweet formatting when they contain emoji with multiple scalars
This commit is contained in:
parent
492e9ae065
commit
56c8dad895
|
@ -254,10 +254,10 @@ private extension TwitterFeedProvider {
|
|||
dateFormatter.dateFormat = Self.dateFormat
|
||||
decoder.dateDecodingStrategy = .formatted(dateFormatter)
|
||||
|
||||
// let jsonString = String(data: response.data, encoding: .utf8)
|
||||
// let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("twitter.json")
|
||||
// print("******** writing to: \(url.path)")
|
||||
// try? jsonString?.write(toFile: url.path, atomically: true, encoding: .utf8)
|
||||
let jsonString = String(data: response.data, encoding: .utf8)
|
||||
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("twitter.json")
|
||||
print("******** writing to: \(url.path)")
|
||||
try? jsonString?.write(toFile: url.path, atomically: true, encoding: .utf8)
|
||||
|
||||
do {
|
||||
let tweets: [TwitterStatus]
|
||||
|
|
|
@ -71,20 +71,34 @@ private extension TwitterStatus {
|
|||
}
|
||||
|
||||
var displayHTML: String? {
|
||||
if let text = fullText, let displayRange = displayTextRange, displayRange.count > 1,
|
||||
let displayStartIndex = text.index(text.startIndex, offsetBy: displayRange[0], limitedBy: text.endIndex),
|
||||
let displayEndIndex = text.index(text.startIndex, offsetBy: displayRange[1], limitedBy: text.endIndex),
|
||||
let entities = entities?.combineAndSort() {
|
||||
if let text = fullText, let displayRange = displayTextRange, displayRange.count > 1, let entities = entities?.combineAndSort() {
|
||||
|
||||
let displayStartIndex = text.index(text.startIndex, offsetBy: displayRange[0], limitedBy: text.endIndex) ?? text.startIndex
|
||||
let displayEndIndex = text.index(text.startIndex, offsetBy: displayRange[1], limitedBy: text.endIndex) ?? text.endIndex
|
||||
|
||||
var html = String()
|
||||
var prevIndex = displayStartIndex
|
||||
|
||||
for entity in entities {
|
||||
if let entityStartIndex = text.index(text.startIndex, offsetBy: entity.startIndex, limitedBy: text.endIndex),
|
||||
let entityEndIndex = text.index(text.startIndex, offsetBy: entity.endIndex, limitedBy: text.endIndex) {
|
||||
|
||||
// The twitter indices are messed up by emoji with more than one scalar, we are trying to adjust for that here.
|
||||
var offset = 0
|
||||
let emojiEndIndex = text.index(text.startIndex, offsetBy: entity.endIndex, limitedBy: text.endIndex) ?? text.endIndex
|
||||
if text.startIndex < prevIndex {
|
||||
let emojis = String(text[text.startIndex..<emojiEndIndex]).emojis
|
||||
for emoji in emojis {
|
||||
offset += emoji.unicodeScalars.count - 1
|
||||
}
|
||||
}
|
||||
|
||||
let offsetStartIndex = entity.startIndex - offset
|
||||
let offsetEndIndex = entity.endIndex - offset
|
||||
|
||||
let entityStartIndex = text.index(text.startIndex, offsetBy: offsetStartIndex, limitedBy: text.endIndex) ?? text.startIndex
|
||||
let entityEndIndex = text.index(text.startIndex, offsetBy: offsetEndIndex, limitedBy: text.endIndex) ?? text.endIndex
|
||||
|
||||
if prevIndex < entityStartIndex {
|
||||
html += String(text[prevIndex..<entityStartIndex])
|
||||
html += String(text[prevIndex..<entityStartIndex]).replacingOccurrences(of: "\n", with: "<br>")
|
||||
}
|
||||
|
||||
// We drop off any URL which is just pointing to the quoted status. It is redundant.
|
||||
|
@ -97,7 +111,7 @@ private extension TwitterStatus {
|
|||
}
|
||||
|
||||
prevIndex = entityEndIndex
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if prevIndex < displayEndIndex {
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit a742db73c4f4007f0d7097746c88ce2074400045
|
||||
Subproject commit 3dfa570a4600690290cd946b8e122b0b99da0a13
|
Loading…
Reference in New Issue