@@ -58,7 +58,14 @@ public struct TerminalStyle {
58
58
59
59
extension String {
60
60
/// Enable/disable colorization
61
- public static var isColorizationEnabled = true
61
+ public static var isColorizationEnabled : Bool {
62
+ get {
63
+ return StringColorizationManager . shared. isColorizationEnabled
64
+ }
65
+ set {
66
+ StringColorizationManager . shared. isColorizationEnabled = newValue
67
+ }
68
+ }
62
69
63
70
public func bold( ) -> String {
64
71
return applyStyle ( TerminalStyle . bold)
@@ -93,7 +100,7 @@ extension String {
93
100
}
94
101
95
102
public func reset( ) -> String {
96
- guard String . isColorizationEnabled else { return self }
103
+ guard StringColorizationManager . shared . isColorizationEnabled else { return self }
97
104
return " \u{001B} [0m " + self
98
105
}
99
106
@@ -116,7 +123,7 @@ extension String {
116
123
}
117
124
118
125
private func applyStyle( _ codeStyle: TerminalStyleCode ) -> String {
119
- guard String . isColorizationEnabled else { return self }
126
+ guard StringColorizationManager . shared . isColorizationEnabled else { return self }
120
127
let str = self . replacingOccurrences ( of: TerminalStyle . reset. open, with: TerminalStyle . reset. open + codeStyle. open)
121
128
122
129
return codeStyle. open + str + TerminalStyle. reset. open
@@ -521,3 +528,20 @@ public enum TerminalColor: UInt8 {
521
528
return ( " \u{001B} [48;5; \( self . rawValue) m " , TerminalStyle . reset. open)
522
529
}
523
530
}
531
+
532
+ // MARK: - Colorization Manager
533
+ internal final class StringColorizationManager : @unchecked Sendable {
534
+ internal static let shared = StringColorizationManager ( )
535
+
536
+ private let queue = DispatchQueue ( label: " com.github.mtynior.ColorizeSwift.StringColorizationManager " )
537
+ private var _isColorizationEnabled = true
538
+
539
+ internal var isColorizationEnabled : Bool {
540
+ get {
541
+ return queue. sync { _isColorizationEnabled }
542
+ }
543
+ set {
544
+ queue. sync { _isColorizationEnabled = newValue }
545
+ }
546
+ }
547
+ }
0 commit comments