1 /* vi: set sw=4 ts=4: */
3 * Unicode support routines.
5 * Copyright (C) 2010 Denys Vlasenko
7 * Licensed under GPLv2, see file LICENSE in this source tree.
12 const char* FAST_FUNC
printable_string(uni_stat_t
*stats
, const char *str
)
14 static char *saved
[4];
15 static unsigned cur_saved
; /* = 0 */
24 /* 99+% of inputs do not need conversion */
26 stats
->byte_count
= (s
- str
);
27 stats
->unicode_count
= (s
- str
);
28 stats
->unicode_width
= (s
- str
);
39 #if ENABLE_UNICODE_SUPPORT
40 dst
= unicode_conv_to_printable(stats
, str
);
43 char *d
= dst
= xstrdup(str
);
48 if (c
< ' ' || c
>= 0x7f)
53 stats
->byte_count
= (d
- dst
);
54 stats
->unicode_count
= (d
- dst
);
55 stats
->unicode_width
= (d
- dst
);
60 free(saved
[cur_saved
]);
61 saved
[cur_saved
] = dst
;
62 cur_saved
= (cur_saved
+ 1) & (ARRAY_SIZE(saved
)-1);