@@ -83,21 +83,68 @@ final class InvisibleCharactersCoordinator: InvisibleCharactersDelegate {
8383 func invisibleStyle( for character: UInt16 , at range: NSRange , lineRange: NSRange ) -> InvisibleCharacterStyle ? {
8484 switch character {
8585 case InvisibleCharactersConfig . Symbols. space:
86- guard config. showSpaces else { return nil }
87- let locationInLine = range. location - lineRange. location
88- let shouldBold = locationInLine % indentOption. charCount == indentOption. charCount - 1
89- return . replace( replacementCharacter: " · " , color: invisibleColor, font: shouldBold ? emphasizedFont : font)
86+ return spacesStyle ( range: range, lineRange: lineRange)
9087 case InvisibleCharactersConfig . Symbols. tab:
91- guard config. showTabs else { return nil }
92- return . replace( replacementCharacter: " → " , color: invisibleColor, font: font)
93- case InvisibleCharactersConfig . Symbols. carriageReturn, InvisibleCharactersConfig . Symbols. lineFeed:
94- guard config. showLineEndings else { return nil }
95- return . replace( replacementCharacter: " ¬ " , color: invisibleColor, font: font)
88+ return tabStyle ( )
89+ case InvisibleCharactersConfig . Symbols. carriageReturn:
90+ return carriageReturnStyle ( )
91+ case InvisibleCharactersConfig . Symbols. lineFeed:
92+ return lineFeedStyle ( )
93+ case InvisibleCharactersConfig . Symbols. paragraphSeparator:
94+ return paragraphSeparatorStyle ( )
95+ case InvisibleCharactersConfig . Symbols. lineSeparator:
96+ return lineSeparatorStyle ( )
9697 default :
97- guard config. warningCharacters. contains ( character) else {
98- return nil
99- }
100- return . emphasize( color: . systemRed. withAlphaComponent ( 0.3 ) )
98+ return warningCharacterStyle ( for: character)
10199 }
102100 }
101+
102+ private func spacesStyle( range: NSRange , lineRange: NSRange ) -> InvisibleCharacterStyle ? {
103+ guard config. showSpaces else { return nil }
104+ let locationInLine = range. location - lineRange. location
105+ let shouldBold = locationInLine % indentOption. charCount == indentOption. charCount - 1
106+ return . replace(
107+ replacementCharacter: config. spaceReplacement,
108+ color: invisibleColor,
109+ font: shouldBold ? emphasizedFont : font
110+ )
111+ }
112+
113+ private func tabStyle( ) -> InvisibleCharacterStyle ? {
114+ guard config. showTabs else { return nil }
115+ return . replace( replacementCharacter: config. tabReplacement, color: invisibleColor, font: font)
116+ }
117+
118+ private func carriageReturnStyle( ) -> InvisibleCharacterStyle ? {
119+ guard config. showLineEndings else { return nil }
120+ return . replace( replacementCharacter: config. carriageReturnReplacement, color: invisibleColor, font: font)
121+ }
122+
123+ private func lineFeedStyle( ) -> InvisibleCharacterStyle ? {
124+ guard config. showLineEndings else { return nil }
125+ return . replace( replacementCharacter: config. lineFeedReplacement, color: invisibleColor, font: font)
126+ }
127+
128+ private func paragraphSeparatorStyle( ) -> InvisibleCharacterStyle ? {
129+ guard config. showLineEndings else { return nil }
130+ return . replace(
131+ replacementCharacter: config. paragraphSeparatorReplacement,
132+ color: invisibleColor,
133+ font: font
134+ )
135+ }
136+
137+ private func lineSeparatorStyle( ) -> InvisibleCharacterStyle ? {
138+ guard config. showLineEndings else { return nil }
139+ return . replace(
140+ replacementCharacter: config. lineSeparatorReplacement,
141+ color: invisibleColor,
142+ font: font
143+ )
144+ }
145+
146+ private func warningCharacterStyle( for character: UInt16 ) -> InvisibleCharacterStyle ? {
147+ guard config. warningCharacters. contains ( character) else { return nil }
148+ return . emphasize( color: . systemRed. withAlphaComponent ( 0.3 ) )
149+ }
103150}
0 commit comments