NAME
Text::ANSI::WideUtil - Routines for text containing ANSI color codes
(wide-character functions only)
VERSION
This document describes version 0.232 of Text::ANSI::WideUtil (from Perl
distribution Text-ANSI-WideUtil), released on 2021-04-14.
SYNOPSIS
use Text::ANSI::WideUtil qw(
ta_mbpad
ta_mbsubstr
ta_mbswidth
ta_mbswidth_height
ta_mbtrunc
ta_mbwrap
);
# calculate visual width of text if printed on terminal (can handle Unicode
# wide characters and exclude the ANSI color codes)
say ta_mbswidth("\e[31mred"); # => 3
say ta_mbswidth("\e[31m红色"); # => 4
# ditto, but also return the number of lines
say ta_mbswidth_height("\e[31mred\n红色"); # => [4, 2]
# wrap text to a certain column width, handle ANSI color codes
say ta_mbwrap(...);
# pad (left, right, center) text to a certain width
say ta_mbpad(...);
# truncate text to a certain width while still passing ANSI color codes
say ta_mbtrunc(...);
# get substring, like ta_substr()
my $substr = ta_mbsubstr("...", $pos, $len);
# return text but with substring replaced with replacement
say ta_mbsubstr("...", $pos, $len, $replacement);
DESCRIPTION
This module contains the wide-character variant ("ta_mb*()") for some
functions in Text::ANSI::Util. It is split so only this module requires
Text::WideChar::Util and Text::ANSI::Util can be kept slim.
FUNCTIONS
ta_mbpad($text, $width[, $which[, $padchar[, $truncate]]]) => STR
Pad <$text> to $width. Like "ta_pad()" but it uses "ta_mbswidth()" to
determine visual width instead of "ta_length()". See documentation for
"ta_pad()" for more details on the other arguments.
ta_mbtrunc($text, $width) => STR
Truncate $text to $width. Like "ta_trunc()" but it uses "ta_mbswidth()"
to determine visual width instead of "ta_length()".
ta_mbswidth($text) => INT
Return visual width of $text (in number of columns) if printed on
terminal. Equivalent to
"Text::WideChar::Util::mbswidth(ta_strip($text))". This function can be
used e.g. in making sure that your text aligns vertically when output to
the terminal in tabular/table format.
Note that "ta_mbswidth()" handles multiline text correctly, e.g.:
"ta_mbswidth("foo\nbarbaz")" gives 6 instead of 3-1+8 = 8. It splits the
input text first with "/\r?\n/" as separator.
ta_mbswidth_height($text) => [INT, INT]
Like "ta_mbswidth()", but also gives height (number of lines). For
example, "ta_mbswidth_height("西爪哇\nb\n")" gives "[6, 3]".
ta_mbwrap($text, $width, \%opts) => STR
Like "ta_wrap()", but it uses "ta_mbswidth()" to determine visual width
instead of "ta_length()".
Performance: ~300/s on my Core i5 1.7GHz laptop for a ~1KB of text (with
zero to moderate amount of color codes). As a comparison,
Text::WideChar::Util's mbwrap() can do about 650/s.
ta_mbsubstr($text, $pos, $len[ , $replacement ]) => STR
Like "ta_substr()", but handles wide characters. $pos is counted in
visual width, not number of characters.
FAQ
Why split functionalities of wide character and color support into multiple modules/distributions?
Performance (see numbers in the function description), dependency
(Unicode::GCString is used for wide character support), and overhead
(loading Unicode::GCString).
How do I truncate string based on number of characters instead of columns?
You can simply use "ta_trunc()" even on text containing wide characters.
ta_trunc() uses Perl's length() which works on a per-character basis.
HOMEPAGE
Please visit the project's homepage at
<https://metacpan.org/release/Text-ANSI-WideUtil>.
SOURCE
Source repository is at
<https://github.com/perlancar/perl-Text-ANSI-WideUtil>.
BUGS
Please report any bugs or feature requests on the bugtracker website
<https://github.com/perlancar/perl-Text-ANSI-WideUtil/issues>
When submitting a bug or request, please include a test-file or a patch
to an existing test-file that illustrates the bug or desired feature.
SEE ALSO
Text::ANSI::Util, Text::WideChar::Util, Text::NonWideChar::Util,
Text::Wrap, String::Pad
<http://en.wikipedia.org/wiki/ANSI_escape_code>
CLI's that use functions from this module include: dux from App::dux
("dux wrap", "dux lpad", "dux rpad").
AUTHOR
perlancar <perlancar@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2021, 2020, 2015 by perlancar@cpan.org.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.