Skip to content

Commit b9aa229

Browse files
committed
Fix text formatting when pasting from notes on iPad
1 parent b7f84a9 commit b9aa229

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

submodules/Pasteboard/Sources/Pasteboard.swift

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,29 @@ private func chatInputStateString(attributedString: NSAttributedString) -> NSAtt
5353
}
5454
if let value = attributes[.font], let font = value as? UIFont {
5555
let fontName = font.fontName.lowercased()
56-
if fontName.contains("bolditalic") {
57-
string.addAttribute(ChatTextInputAttributes.bold, value: true as NSNumber, range: range)
58-
string.addAttribute(ChatTextInputAttributes.italic, value: true as NSNumber, range: range)
59-
} else if fontName.contains("bold") {
60-
string.addAttribute(ChatTextInputAttributes.bold, value: true as NSNumber, range: range)
61-
} else if fontName.contains("italic") {
62-
string.addAttribute(ChatTextInputAttributes.italic, value: true as NSNumber, range: range)
63-
} else if fontName.contains("menlo") || fontName.contains("courier") || fontName.contains("sfmono") {
64-
string.addAttribute(ChatTextInputAttributes.monospace, value: true as NSNumber, range: range)
56+
if fontName.hasPrefix(".sfui") {
57+
let traits = font.fontDescriptor.symbolicTraits
58+
if traits.contains(.traitMonoSpace) {
59+
string.addAttribute(ChatTextInputAttributes.monospace, value: true as NSNumber, range: range)
60+
} else {
61+
if traits.contains(.traitBold) {
62+
string.addAttribute(ChatTextInputAttributes.bold, value: true as NSNumber, range: range)
63+
}
64+
if traits.contains(.traitItalic) {
65+
string.addAttribute(ChatTextInputAttributes.italic, value: true as NSNumber, range: range)
66+
}
67+
}
68+
} else {
69+
if fontName.contains("bolditalic") {
70+
string.addAttribute(ChatTextInputAttributes.bold, value: true as NSNumber, range: range)
71+
string.addAttribute(ChatTextInputAttributes.italic, value: true as NSNumber, range: range)
72+
} else if fontName.contains("bold") {
73+
string.addAttribute(ChatTextInputAttributes.bold, value: true as NSNumber, range: range)
74+
} else if fontName.contains("italic") {
75+
string.addAttribute(ChatTextInputAttributes.italic, value: true as NSNumber, range: range)
76+
} else if fontName.contains("menlo") || fontName.contains("courier") || fontName.contains("sfmono") {
77+
string.addAttribute(ChatTextInputAttributes.monospace, value: true as NSNumber, range: range)
78+
}
6579
}
6680
}
6781
if let value = attributes[.backgroundColor] as? UIColor, value.rgb == UIColor.gray.rgb {

submodules/TelegramUI/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ swift_library(
7070
"//submodules/MediaPlayer:UniversalMediaPlayer",
7171
"//submodules/TelegramVoip:TelegramVoip",
7272
"//submodules/DeviceAccess:DeviceAccess",
73+
"//submodules/Utils/DeviceModel",
7374
"//submodules/WatchCommon/Host:WatchCommon",
7475
"//submodules/BuildConfig:BuildConfig",
7576
"//submodules/BuildConfigExtra:BuildConfigExtra",

submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Foundation
2+
import UniformTypeIdentifiers
23
import UIKit
34
import Display
45
import AsyncDisplayKit
@@ -44,6 +45,7 @@ import TelegramNotices
4445
import AnimatedCountLabelNode
4546
import TelegramStringFormatting
4647
import TextNodeWithEntities
48+
import DeviceModel
4749

4850
private let accessoryButtonFont = Font.medium(14.0)
4951
private let counterFont = Font.with(size: 14.0, design: .regular, traits: [.monospacedNumbers])
@@ -4473,10 +4475,14 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate, Ch
44734475
var attributedString: NSAttributedString?
44744476
if let data = pasteboard.data(forPasteboardType: "private.telegramtext"), let value = chatInputStateStringFromAppSpecificString(data: data) {
44754477
attributedString = value
4476-
} else if let data = pasteboard.data(forPasteboardType: kUTTypeRTF as String) {
4478+
} else if let data = pasteboard.data(forPasteboardType: "public.rtf") {
44774479
attributedString = chatInputStateStringFromRTF(data, type: NSAttributedString.DocumentType.rtf)
44784480
} else if let data = pasteboard.data(forPasteboardType: "com.apple.flat-rtfd") {
4479-
attributedString = chatInputStateStringFromRTF(data, type: NSAttributedString.DocumentType.rtfd)
4481+
if let _ = pasteboard.data(forPasteboardType: "com.apple.notes.richtext"), DeviceModel.current.isIpad, let htmlData = pasteboard.data(forPasteboardType: "public.html") {
4482+
attributedString = chatInputStateStringFromRTF(htmlData, type: NSAttributedString.DocumentType.html)
4483+
} else {
4484+
attributedString = chatInputStateStringFromRTF(data, type: NSAttributedString.DocumentType.rtfd)
4485+
}
44804486
}
44814487

44824488
if let attributedString = attributedString {

0 commit comments

Comments
 (0)