mirror of
git://jb55.com/damus
synced 2024-09-19 11:43:44 +00:00
posting: don't prepad user tag if its a newline
This fixes one more edgecase with the tag prepend logic.
This commit is contained in:
parent
fe82134a75
commit
ff70cb7ebf
@ -108,9 +108,9 @@ func pad_attr_string(tag: NSAttributedString, before: Bool = true) -> NSAttribut
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if whitespace precedes a tag. Useful to add spacing if we don't have it.
|
/// Checks if whitespace precedes a tag. Useful to add spacing if we don't have it.
|
||||||
func whitespace_precedes_tag(tag: NSAttributedString, post: NSMutableAttributedString, word_range: NSRange) -> Bool {
|
func should_prepad_tag(tag: NSAttributedString, post: NSMutableAttributedString, word_range: NSRange) -> Bool {
|
||||||
if word_range.location == 0 { // If the range starts at the very beginning of the post, there's nothing preceding it.
|
if word_range.location == 0 { // If the range starts at the very beginning of the post, there's nothing preceding it.
|
||||||
return true
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Range for the character preceding the tag
|
// Range for the character preceding the tag
|
||||||
@ -119,8 +119,16 @@ func whitespace_precedes_tag(tag: NSAttributedString, post: NSMutableAttributedS
|
|||||||
// Get the preceding character
|
// Get the preceding character
|
||||||
let precedingCharacter = post.attributedSubstring(from: precedingCharacterRange)
|
let precedingCharacter = post.attributedSubstring(from: precedingCharacterRange)
|
||||||
|
|
||||||
|
guard let char = precedingCharacter.string.first else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if char.isNewline {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the preceding character is a whitespace character
|
// Check if the preceding character is a whitespace character
|
||||||
return precedingCharacter.string.rangeOfCharacter(from: CharacterSet.whitespaces) != nil
|
return !char.isWhitespace
|
||||||
}
|
}
|
||||||
|
|
||||||
struct AppendedTag {
|
struct AppendedTag {
|
||||||
@ -134,7 +142,7 @@ func append_user_tag(tag: NSAttributedString, post: NSMutableAttributedString, w
|
|||||||
|
|
||||||
// If we have a non-empty post and the last character is not whitespace, append a space
|
// If we have a non-empty post and the last character is not whitespace, append a space
|
||||||
// This prevents issues such as users typing cc@will and have it expand to ccnostr:bech32...
|
// This prevents issues such as users typing cc@will and have it expand to ccnostr:bech32...
|
||||||
let should_prepad = !whitespace_precedes_tag(tag: tag, post: post, word_range: word_range)
|
let should_prepad = should_prepad_tag(tag: tag, post: post, word_range: word_range)
|
||||||
let tag = pad_attr_string(tag: tag, before: should_prepad)
|
let tag = pad_attr_string(tag: tag, before: should_prepad)
|
||||||
|
|
||||||
new_post.replaceCharacters(in: word_range, with: tag)
|
new_post.replaceCharacters(in: word_range, with: tag)
|
||||||
|
@ -224,6 +224,26 @@ class ReplyTests: XCTestCase {
|
|||||||
XCTAssertEqual(new_post.string, "😎 @jb55 ")
|
XCTAssertEqual(new_post.string, "😎 @jb55 ")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testComposedMentionNewline() throws {
|
||||||
|
let content = """
|
||||||
|
|
||||||
|
@jb55
|
||||||
|
"""
|
||||||
|
|
||||||
|
let profile = Profile(name: "jb55")
|
||||||
|
let tag = user_tag_attr_string(profile: profile, pubkey: "pk")
|
||||||
|
let appended = append_user_tag(tag: tag, post: .init(string: content), word_range: .init(1...5))
|
||||||
|
let new_post = appended.post
|
||||||
|
|
||||||
|
try new_post.testAttributes(conditions: [
|
||||||
|
{ let link = $0[.link] as? String; XCTAssertNil(link) },
|
||||||
|
{ let link = $0[.link] as! String; XCTAssertEqual(link, "damus:nostr:pk") },
|
||||||
|
{ let link = $0[.link] as? String; XCTAssertNil(link) },
|
||||||
|
])
|
||||||
|
|
||||||
|
XCTAssertEqual(new_post.string, "\n@jb55 ")
|
||||||
|
}
|
||||||
|
|
||||||
func testComposedMention() throws {
|
func testComposedMention() throws {
|
||||||
let content = "@jb55"
|
let content = "@jb55"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user