Skip to content

Commit

Permalink
Fixing Regex. Also allowing '.@mention'
Browse files Browse the repository at this point in the history
  • Loading branch information
Pol Quintana committed Jan 8, 2016
1 parent 151f250 commit b66b029
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 5 deletions.
10 changes: 8 additions & 2 deletions ActiveLabel/ActiveType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ struct ActiveBuilder {

for mention in mentions where mention.range.length > 2 {
let range = NSRange(location: mention.range.location + 1, length: mention.range.length - 1)
let word = nsstring.substringWithRange(range)
var word = nsstring.substringWithRange(range)
if word.hasPrefix("@") {
word.removeAtIndex(word.startIndex)
}
let element = ActiveElement.Mention(word)
elements.append((mention.range, element))
}
Expand All @@ -45,7 +48,10 @@ struct ActiveBuilder {

for hashtag in hashtags where hashtag.range.length > 2 {
let range = NSRange(location: hashtag.range.location + 1, length: hashtag.range.length - 1)
let word = nsstring.substringWithRange(range)
var word = nsstring.substringWithRange(range)
if word.hasPrefix("#") {
word.removeAtIndex(word.startIndex)
}
let element = ActiveElement.Hashtag(word)
elements.append((hashtag.range, element))
}
Expand Down
4 changes: 2 additions & 2 deletions ActiveLabel/RegexParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import Foundation

struct RegexParser {
static let hashtagRegex = try? NSRegularExpression(pattern: "#[a-z0-9_]*", options: [.CaseInsensitive])
static let mentionRegex = try? NSRegularExpression(pattern: "@[a-z0-9_]*", options: [.CaseInsensitive])
static let hashtagRegex = try? NSRegularExpression(pattern: "(?:^|\\s|$)#[a-z0-9_]*", options: [.CaseInsensitive])
static let mentionRegex = try? NSRegularExpression(pattern: "(?:^|\\s|$|[.])@[a-z0-9_]*", options: [.CaseInsensitive])
static let urlDetector = try? NSDataDetector(types: NSTextCheckingType.Link.rawValue)

static func getMentions(fromText text: String, range: NSRange) -> [NSTextCheckingResult] {
Expand Down
50 changes: 49 additions & 1 deletion ActiveLabelTests/ActiveTypeTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,34 @@ class ActiveTypeTests: XCTestCase {
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "_with_underscores_")
XCTAssertEqual(currentElementType, ActiveType.Mention)

label.text = " . @userhandle"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "userhandle")
XCTAssertEqual(currentElementType, ActiveType.Mention)

label.text = "@user#hashtag"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "user")
XCTAssertEqual(currentElementType, ActiveType.Mention)

label.text = "@user@mention"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "user")
XCTAssertEqual(currentElementType, ActiveType.Mention)

label.text = ".@userhandle"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "userhandle")
XCTAssertEqual(currentElementType, ActiveType.Mention)

label.text = " .@userhandle"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "userhandle")
XCTAssertEqual(currentElementType, ActiveType.Mention)

label.text = "word@mention"
XCTAssertEqual(activeElements.count, 0)
label.text = "@u"
XCTAssertEqual(activeElements.count, 0)
label.text = "@."
Expand All @@ -119,7 +146,28 @@ class ActiveTypeTests: XCTestCase {
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "_with_underscores_")
XCTAssertEqual(currentElementType, ActiveType.Hashtag)


label.text = " . #somehashtag"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "somehashtag")
XCTAssertEqual(currentElementType, ActiveType.Hashtag)

label.text = "#some#hashtag"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "some")
XCTAssertEqual(currentElementType, ActiveType.Hashtag)

label.text = "#some@mention"
XCTAssertEqual(activeElements.count, 1)
XCTAssertEqual(currentElementString, "some")
XCTAssertEqual(currentElementType, ActiveType.Hashtag)

label.text = ".#somehashtag"
XCTAssertEqual(activeElements.count, 0)
label.text = " .#somehashtag"
XCTAssertEqual(activeElements.count, 0)
label.text = "word#hashtag"
XCTAssertEqual(activeElements.count, 0)
label.text = "#h"
XCTAssertEqual(activeElements.count, 0)
label.text = "#."
Expand Down

0 comments on commit b66b029

Please sign in to comment.