@@ -155,7 +155,12 @@ defmodule IO.ANSI do
155
155
"""
156
156
@spec escape( String. t , emit :: boolean) :: String . t
157
157
def escape ( string , emit // terminal? ) do
158
- do_escape ( string <> "%{reset}" , false , emit , [ ] )
158
+ { rendered , emitted } = do_escape ( string , false , emit , false , [ ] )
159
+ if emitted and emit do
160
+ rendered <> reset
161
+ else
162
+ rendered
163
+ end
159
164
end
160
165
161
166
@doc % B"""
@@ -177,33 +182,34 @@ defmodule IO.ANSI do
177
182
"""
178
183
@spec escape_fragment( String. t , emit :: boolean) :: String . t
179
184
def escape_fragment ( string , emit // terminal? ) do
180
- do_escape ( string , false , emit , [ ] )
185
+ { rendered , _emitted } = do_escape ( string , false , emit , false , [ ] )
186
+ rendered
181
187
end
182
188
183
- defp do_escape ( << ?% , ?{ , rest :: binary >> , false , emit , acc ) do
189
+ defp do_escape ( << ?% , ?{ , rest :: binary >> , false , emit , _emitted , acc ) do
184
190
do_escape_sequence ( rest , emit , acc )
185
191
end
186
- defp do_escape ( << ?, , rest :: binary >> , true , emit , acc ) do
192
+ defp do_escape ( << ?, , rest :: binary >> , true , emit , _emitted , acc ) do
187
193
do_escape_sequence ( rest , emit , acc )
188
194
end
189
- defp do_escape ( << ?\s , rest :: binary >> , true , emit , acc ) do
190
- do_escape ( rest , true , emit , acc )
195
+ defp do_escape ( << ?\s , rest :: binary >> , true , emit , emitted , acc ) do
196
+ do_escape ( rest , true , emit , emitted , acc )
191
197
end
192
- defp do_escape ( << ?} , rest :: binary >> , true , emit , acc ) do
193
- do_escape ( rest , false , emit , acc )
198
+ defp do_escape ( << ?} , rest :: binary >> , true , emit , emitted , acc ) do
199
+ do_escape ( rest , false , emit , emitted , acc )
194
200
end
195
- defp do_escape ( << x :: [ binary , size ( 1 ) ] , rest :: binary >> , false , emit , acc ) do
196
- do_escape ( rest , false , emit , [ x | acc ] )
201
+ defp do_escape ( << x :: [ binary , size ( 1 ) ] , rest :: binary >> , false , emit , emitted , acc ) do
202
+ do_escape ( rest , false , emit , emitted , [ x | acc ] )
197
203
end
198
- defp do_escape ( "" , false , _emit , acc ) do
199
- list_to_binary ( Enum . reverse ( acc ) )
204
+ defp do_escape ( "" , false , _emit , emitted , acc ) do
205
+ { list_to_binary ( Enum . reverse ( acc ) ) , emitted }
200
206
end
201
207
202
208
defp do_escape_sequence ( rest , emit , acc ) do
203
209
{ code , rest } = escape_sequence ( rest )
204
210
if emit do
205
211
acc = [ code | acc ]
206
212
end
207
- do_escape ( rest , true , emit , acc )
213
+ do_escape ( rest , true , emit , true , acc )
208
214
end
209
215
end
0 commit comments