72 lines
2.4 KiB
Swift
72 lines
2.4 KiB
Swift
//
|
|
// String+Attributed.swift
|
|
// ToMove
|
|
//
|
|
// Created by Saveliy Stavitsky on 4/26/20.
|
|
// Copyright © 2020 Saveliy Stavitsky. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
// MARK: - REFACTOR
|
|
|
|
typealias AttributedString = NSMutableAttributedString
|
|
|
|
extension UIFont {
|
|
enum Style: String {
|
|
case regular = "Regular"
|
|
case medium = "Medium"
|
|
case bold = "Bold"
|
|
}
|
|
|
|
static func font(style: Style, size: CGFloat) -> UIFont { UIFont(name: "GolosUI-\(style.rawValue)", size: size)! }
|
|
}
|
|
|
|
extension String {
|
|
var attributed: AttributedString { .init(string: self) }
|
|
func attributed(
|
|
style: UIFont.Style = .regular,
|
|
size: CGFloat = 12,
|
|
color: UIColor = Asset.textGranite.color,
|
|
alignment: NSTextAlignment = .left
|
|
) -> AttributedString {
|
|
let paragraph = NSMutableParagraphStyle()
|
|
paragraph.alignment = alignment
|
|
return .init(string: self, attributes: [
|
|
.font: UIFont.font(style: style, size: size),
|
|
.foregroundColor: color,
|
|
.paragraphStyle: paragraph
|
|
])
|
|
}
|
|
func attributed(named: String, color: UIColor = Asset.textGranite.color) -> AttributedString {
|
|
let comps = named.components(separatedBy: "_")
|
|
guard comps.count == 2, (Int(comps[1]) ?? 0) > 6 else { return attributed }
|
|
return attributed(style: ([
|
|
"regular": .regular,
|
|
"medium": .medium,
|
|
"bold": .bold
|
|
] as [String: UIFont.Style])[comps[0]] ?? .regular, size: CGFloat(Int(comps[1]) ?? 0), color: color)
|
|
}
|
|
}
|
|
|
|
extension NSAttributedString {
|
|
|
|
func applying(attribute: NSAttributedString.Key, value: Any) -> AttributedString {
|
|
let copy = NSMutableAttributedString(attributedString: self)
|
|
copy.addAttribute(attribute, value: value, range: (string as NSString).range(of: string))
|
|
return copy
|
|
}
|
|
|
|
static func + (lhs: NSAttributedString, rhs: NSAttributedString) -> AttributedString {
|
|
let string: AttributedString = .init(attributedString: lhs) // .configure({ $0.append(lhs) })
|
|
string.append(rhs)
|
|
return .init(attributedString: string)
|
|
}
|
|
|
|
static func + (lhs: NSAttributedString, rhs: String) -> AttributedString {
|
|
let string = AttributedString(attributedString: lhs)
|
|
string.append(rhs.attributed)
|
|
return .init(attributedString: string)
|
|
}
|
|
}
|