|
@@ -21,32 +21,55 @@ class CustomTextView: UITextView {
|
|
|
|
|
|
@objc func toggleStrikethrough(_ sender: Any?) {
|
|
@objc func toggleStrikethrough(_ sender: Any?) {
|
|
if let range = self.selectedTextRange {
|
|
if let range = self.selectedTextRange {
|
|
- self.replace(self.textRange(from: range.start, to: range.end)!, withText: "~\(self.text(in: range)!)~")
|
|
|
|
|
|
+ let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
|
|
|
|
+ if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: "~\(self.text(in: range)!)~")
|
|
|
|
+ } else {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: " ~\(self.text(in: range)!)~")
|
|
|
|
+ }
|
|
UIMenuController.shared.isMenuVisible = false
|
|
UIMenuController.shared.isMenuVisible = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
override func toggleBoldface(_ sender: Any?) {
|
|
override func toggleBoldface(_ sender: Any?) {
|
|
if let range = self.selectedTextRange {
|
|
if let range = self.selectedTextRange {
|
|
- self.replace(self.textRange(from: range.start, to: range.end)!, withText: "*\(self.text(in: range)!)*")
|
|
|
|
|
|
+ let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
|
|
|
|
+ if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: "*\(self.text(in: range)!)*")
|
|
|
|
+ } else {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: " *\(self.text(in: range)!)*")
|
|
|
|
+ }
|
|
UIMenuController.shared.isMenuVisible = false
|
|
UIMenuController.shared.isMenuVisible = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
override func toggleUnderline(_ sender: Any?) {
|
|
override func toggleUnderline(_ sender: Any?) {
|
|
if let range = self.selectedTextRange {
|
|
if let range = self.selectedTextRange {
|
|
- self.replace(self.textRange(from: range.start, to: range.end)!, withText: "^\(self.text(in: range)!)^")
|
|
|
|
|
|
+ let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
|
|
|
|
+ if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: "^\(self.text(in: range)!)^")
|
|
|
|
+ } else {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: " ^\(self.text(in: range)!)^")
|
|
|
|
+ }
|
|
UIMenuController.shared.isMenuVisible = false
|
|
UIMenuController.shared.isMenuVisible = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
override func toggleItalics(_ sender: Any?) {
|
|
override func toggleItalics(_ sender: Any?) {
|
|
if let range = self.selectedTextRange {
|
|
if let range = self.selectedTextRange {
|
|
- self.replace(self.textRange(from: range.start, to: range.end)!, withText: "_\(self.text(in: range)!)_")
|
|
|
|
|
|
+ let startPosition = self.offset(from: self.beginningOfDocument, to: range.start)
|
|
|
|
+ if startPosition == 0 || checkCharBefore(char: self.text.substring(from: startPosition - 1, to: startPosition - 1)) {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: "_\(self.text(in: range)!)_")
|
|
|
|
+ } else {
|
|
|
|
+ self.replace(self.textRange(from: range.start, to: range.end)!, withText: " _\(self.text(in: range)!)_")
|
|
|
|
+ }
|
|
UIMenuController.shared.isMenuVisible = false
|
|
UIMenuController.shared.isMenuVisible = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ func checkCharBefore(char: String) -> Bool {
|
|
|
|
+ return char == " " || char == "\n"
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|