Update THANKS.
[xz/debian.git] / src / common / tuklib_mbstr.h
blobdde9305f0a1ccbfeccd26ec1a879d7f76b97fcdb
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 /// \file tuklib_mbstr.h
4 /// \brief Utility functions for handling multibyte strings
5 ///
6 /// If not enough multibyte string support is available in the C library,
7 /// these functions keep working with the assumption that all strings
8 /// are in a single-byte character set without combining characters, e.g.
9 /// US-ASCII or ISO-8859-*.
11 // Author: Lasse Collin
13 // This file has been put into the public domain.
14 // You can do whatever you want with this file.
16 ///////////////////////////////////////////////////////////////////////////////
18 #ifndef TUKLIB_MBSTR_H
19 #define TUKLIB_MBSTR_H
21 #include "tuklib_common.h"
22 TUKLIB_DECLS_BEGIN
24 #define tuklib_mbstr_width TUKLIB_SYMBOL(tuklib_mbstr_width)
25 extern size_t tuklib_mbstr_width(const char *str, size_t *bytes);
26 ///<
27 /// \brief Get the number of columns needed for the multibyte string
28 ///
29 /// This is somewhat similar to wcswidth() but works on multibyte strings.
30 ///
31 /// \param str String whose width is to be calculated. If the
32 /// current locale uses a multibyte character set
33 /// that has shift states, the string must begin
34 /// and end in the initial shift state.
35 /// \param bytes If this is not NULL, *bytes is set to the
36 /// value returned by strlen(str) (even if an
37 /// error occurs when calculating the width).
38 ///
39 /// \return On success, the number of columns needed to display the
40 /// string e.g. in a terminal emulator is returned. On error,
41 /// (size_t)-1 is returned. Possible errors include invalid,
42 /// partial, or non-printable multibyte character in str, or
43 /// that str doesn't end in the initial shift state.
45 #define tuklib_mbstr_fw TUKLIB_SYMBOL(tuklib_mbstr_fw)
46 extern int tuklib_mbstr_fw(const char *str, int columns_min);
47 ///<
48 /// \brief Get the field width for printf() e.g. to align table columns
49 ///
50 /// Printing simple tables to a terminal can be done using the field field
51 /// feature in the printf() format string, but it works only with single-byte
52 /// character sets. To do the same with multibyte strings, tuklib_mbstr_fw()
53 /// can be used to calculate appropriate field width.
54 ///
55 /// The behavior of this function is undefined, if
56 /// - str is NULL or not terminated with '\0';
57 /// - columns_min <= 0; or
58 /// - the calculated field width exceeds INT_MAX.
59 ///
60 /// \return If tuklib_mbstr_width(str, NULL) fails, -1 is returned.
61 /// If str needs more columns than columns_min, zero is returned.
62 /// Otherwise a positive integer is returned, which can be
63 /// used as the field width, e.g. printf("%*s", fw, str).
65 TUKLIB_DECLS_END
66 #endif