| Index: src/common/tuklib_mbstr.h
|
| ===================================================================
|
| --- src/common/tuklib_mbstr.h (revision 0)
|
| +++ src/common/tuklib_mbstr.h (revision 0)
|
| @@ -0,0 +1,66 @@
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +//
|
| +/// \file tuklib_mstr.h
|
| +/// \brief Utility functions for handling multibyte strings
|
| +///
|
| +/// If not enough multibyte string support is available in the C library,
|
| +/// these functions keep working with the assumption that all strings
|
| +/// are in a single-byte character set without combining characters, e.g.
|
| +/// US-ASCII or ISO-8859-*.
|
| +//
|
| +// Author: Lasse Collin
|
| +//
|
| +// This file has been put into the public domain.
|
| +// You can do whatever you want with this file.
|
| +//
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| +#ifndef TUKLIB_MBSTR_H
|
| +#define TUKLIB_MBSTR_H
|
| +
|
| +#include "tuklib_common.h"
|
| +TUKLIB_DECLS_BEGIN
|
| +
|
| +#define tuklib_mbstr_width TUKLIB_SYMBOL(tuklib_mbstr_width)
|
| +extern size_t tuklib_mbstr_width(const char *str, size_t *bytes);
|
| +///<
|
| +/// \brief Get the number of columns needed for the multibyte string
|
| +///
|
| +/// This is somewhat similar to wcswidth() but works on multibyte strings.
|
| +///
|
| +/// \param str String whose width is to be calculated. If the
|
| +/// current locale uses a multibyte character set
|
| +/// that has shift states, the string must begin
|
| +/// and end in the initial shift state.
|
| +/// \param bytes If this is not NULL, *bytes is set to the
|
| +/// value returned by strlen(str) (even if an
|
| +/// error occurs when calculating the width).
|
| +///
|
| +/// \return On success, the number of columns needed to display the
|
| +/// string e.g. in a terminal emulator is returned. On error,
|
| +/// (size_t)-1 is returned. Possible errors include invalid,
|
| +/// partial, or non-printable multibyte character in str, or
|
| +/// that str doesn't end in the initial shift state.
|
| +
|
| +#define tuklib_mbstr_fw TUKLIB_SYMBOL(tuklib_mbstr_fw)
|
| +extern int tuklib_mbstr_fw(const char *str, int columns_min);
|
| +///<
|
| +/// \brief Get the field width for printf() e.g. to align table columns
|
| +///
|
| +/// Printing simple tables to a terminal can be done using the field field
|
| +/// feature in the printf() format string, but it works only with single-byte
|
| +/// character sets. To do the same with multibyte strings, tuklib_mbstr_fw()
|
| +/// can be used to calculate appropriate field width.
|
| +///
|
| +/// The behavior of this function is undefined, if
|
| +/// - str is NULL or not terminated with '\0';
|
| +/// - columns_min <= 0; or
|
| +/// - the calculated field width exceeds INT_MAX.
|
| +///
|
| +/// \return If tuklib_mbstr_width(str, NULL) fails, -1 is returned.
|
| +/// If str needs more columns than columns_min, zero is returned.
|
| +/// Otherwise a positive integer is returned, which can be
|
| +/// used as the field width, e.g. printf("%*s", fw, str).
|
| +
|
| +TUKLIB_DECLS_END
|
| +#endif
|
|
|
| Property changes on: src/common/tuklib_mbstr.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|