     
     if let linkResult = linkResult(with: touches) {
       selectedLinkResult = linkResult
-      didTouch(TouchResult(linkResult: linkResult, touches: touches, event: event, state: .began))
+      let touchResult = TouchResult(linkResult: linkResult, touches: touches, event: event, state: .began)
+      if let delegate = delegate {
+        delegate.contextLabel(self, didTouchWithTouchResult: touchResult)
+      } else {
+        didTouch(touchResult)
+      }
     } else {
       selectedLinkResult = nil
-      didTouch(TouchResult(linkResult: nil, touches: touches, event: event, state: .began))
+      let touchResult = TouchResult(linkResult: nil, touches: touches, event: event, state: .began)
+      if let delegate = delegate {
+        delegate.contextLabel(self, didTouchWithTouchResult: touchResult)
+      } else {
+        didTouch(touchResult)
+      }
     }
     
     addLinkAttributesToLinkResult(withTouches: touches, highlighted: true)

  
  open override func copy(_ sender: Any?) {
    UIPasteboard.general.string = text
    didCopy(text)
  }
  
  open override var intrinsicContentSize : CGSize {

  fileprivate func addLinkAttributesTo(_ attributedString: NSAttributedString, with linkResults: [LinkResult], highlighted: Bool = false) -> NSAttributedString {
    let mutableAttributedString = NSMutableAttributedString(attributedString: attributedString)
    for linkResult in linkResults {
      
      var font = self.font
      if let delegate = delegate {
        font = delegate.contextLabel(self, textFontForLinkResult: linkResult)
      } else if let textFont = textFont?(linkResult) {
        font = textFont
      }
      
      var textColor = foregroundColor(linkResult)
      if let delegate = delegate {
        textColor = delegate.contextLabel(self, foregroundColorForLinkResult: linkResult)
      }
      
      var highlightedTextColor = foregroundHighlightedColor(linkResult)
      if let delegate = delegate {
        highlightedTextColor = delegate.contextLabel(self, foregroundHighlightedColorForLinkResult: linkResult)
      }
      
      let color = (highlighted) ? highlightedTextColor ?? self.highlightedTextColor(textColor) : textColor
      
      var underlineStyle = self.underlineStyle(linkResult)
      if let delegate = delegate {
        underlineStyle = delegate.contextLabel(self, underlineStyleForLinkResult: linkResult)
      }
      
      let attributes = self.attributes(with: font, textColor: color, underlineStyle: underlineStyle)
      
      mutableAttributedString.setAttributes(attributes, range: linkResult.range)
    }
