Annotation of embedaddon/readline/rlmbutil.h, revision 1.1
1.1 ! misho 1: /* rlmbutil.h -- utility functions for multibyte characters. */
! 2:
! 3: /* Copyright (C) 2001-2009 Free Software Foundation, Inc.
! 4:
! 5: This file is part of the GNU Readline Library (Readline), a library
! 6: for reading lines of text with interactive input and history editing.
! 7:
! 8: Readline is free software: you can redistribute it and/or modify
! 9: it under the terms of the GNU General Public License as published by
! 10: the Free Software Foundation, either version 3 of the License, or
! 11: (at your option) any later version.
! 12:
! 13: Readline is distributed in the hope that it will be useful,
! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 16: GNU General Public License for more details.
! 17:
! 18: You should have received a copy of the GNU General Public License
! 19: along with Readline. If not, see <http://www.gnu.org/licenses/>.
! 20: */
! 21:
! 22: #if !defined (_RL_MBUTIL_H_)
! 23: #define _RL_MBUTIL_H_
! 24:
! 25: #include "rlstdc.h"
! 26:
! 27: /************************************************/
! 28: /* check multibyte capability for I18N code */
! 29: /************************************************/
! 30:
! 31: /* For platforms which support the ISO C amendement 1 functionality we
! 32: support user defined character classes. */
! 33: /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
! 34: #if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H)
! 35: # include <wchar.h>
! 36: # include <wctype.h>
! 37: # if defined (HAVE_ISWCTYPE) && \
! 38: defined (HAVE_ISWLOWER) && \
! 39: defined (HAVE_ISWUPPER) && \
! 40: defined (HAVE_MBSRTOWCS) && \
! 41: defined (HAVE_MBRTOWC) && \
! 42: defined (HAVE_MBRLEN) && \
! 43: defined (HAVE_TOWLOWER) && \
! 44: defined (HAVE_TOWUPPER) && \
! 45: defined (HAVE_WCHAR_T) && \
! 46: defined (HAVE_WCWIDTH)
! 47: /* system is supposed to support XPG5 */
! 48: # define HANDLE_MULTIBYTE 1
! 49: # endif
! 50: #endif
! 51:
! 52: /* If we don't want multibyte chars even on a system that supports them, let
! 53: the configuring user turn multibyte support off. */
! 54: #if defined (NO_MULTIBYTE_SUPPORT)
! 55: # undef HANDLE_MULTIBYTE
! 56: #endif
! 57:
! 58: /* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */
! 59: #if HANDLE_MULTIBYTE && !defined (HAVE_MBSTATE_T)
! 60: # define wcsrtombs(dest, src, len, ps) (wcsrtombs) (dest, src, len, 0)
! 61: # define mbsrtowcs(dest, src, len, ps) (mbsrtowcs) (dest, src, len, 0)
! 62: # define wcrtomb(s, wc, ps) (wcrtomb) (s, wc, 0)
! 63: # define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
! 64: # define mbrlen(s, n, ps) (mbrlen) (s, n, 0)
! 65: # define mbstate_t int
! 66: #endif
! 67:
! 68: /* Make sure MB_LEN_MAX is at least 16 on systems that claim to be able to
! 69: handle multibyte chars (some systems define MB_LEN_MAX as 1) */
! 70: #ifdef HANDLE_MULTIBYTE
! 71: # include <limits.h>
! 72: # if defined(MB_LEN_MAX) && (MB_LEN_MAX < 16)
! 73: # undef MB_LEN_MAX
! 74: # endif
! 75: # if !defined (MB_LEN_MAX)
! 76: # define MB_LEN_MAX 16
! 77: # endif
! 78: #endif
! 79:
! 80: /************************************************/
! 81: /* end of multibyte capability checks for I18N */
! 82: /************************************************/
! 83:
! 84: /*
! 85: * Flags for _rl_find_prev_mbchar and _rl_find_next_mbchar:
! 86: *
! 87: * MB_FIND_ANY find any multibyte character
! 88: * MB_FIND_NONZERO find a non-zero-width multibyte character
! 89: */
! 90:
! 91: #define MB_FIND_ANY 0x00
! 92: #define MB_FIND_NONZERO 0x01
! 93:
! 94: extern int _rl_find_prev_mbchar PARAMS((char *, int, int));
! 95: extern int _rl_find_next_mbchar PARAMS((char *, int, int, int));
! 96:
! 97: #ifdef HANDLE_MULTIBYTE
! 98:
! 99: extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *));
! 100: extern int _rl_get_char_len PARAMS((char *, mbstate_t *));
! 101: extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *));
! 102:
! 103: extern int _rl_read_mbchar PARAMS((char *, int));
! 104: extern int _rl_read_mbstring PARAMS((int, char *, int));
! 105:
! 106: extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
! 107:
! 108: extern wchar_t _rl_char_value PARAMS((char *, int));
! 109: extern int _rl_walphabetic PARAMS((wchar_t));
! 110:
! 111: #define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc))
! 112: #define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc))
! 113:
! 114: #define MB_NEXTCHAR(b,s,c,f) \
! 115: ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
! 116: ? _rl_find_next_mbchar ((b), (s), (c), (f)) \
! 117: : ((s) + (c)))
! 118: #define MB_PREVCHAR(b,s,f) \
! 119: ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \
! 120: ? _rl_find_prev_mbchar ((b), (s), (f)) \
! 121: : ((s) - 1))
! 122:
! 123: #define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2)
! 124: #define MB_NULLWCH(x) ((x) == 0)
! 125:
! 126: /* Unicode combining characters range from U+0300 to U+036F */
! 127: #define UNICODE_COMBINING_CHAR(x) ((x) >= 768 && (x) <= 879)
! 128:
! 129: #if defined (WCWIDTH_BROKEN)
! 130: # define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR(wc)) ? 0 : wcwidth(wc))
! 131: #else
! 132: # define WCWIDTH(wc) wcwidth(wc)
! 133: #endif
! 134:
! 135: #else /* !HANDLE_MULTIBYTE */
! 136:
! 137: #undef MB_LEN_MAX
! 138: #undef MB_CUR_MAX
! 139:
! 140: #define MB_LEN_MAX 1
! 141: #define MB_CUR_MAX 1
! 142:
! 143: #define _rl_find_prev_mbchar(b, i, f) (((i) == 0) ? (i) : ((i) - 1))
! 144: #define _rl_find_next_mbchar(b, i1, i2, f) ((i1) + (i2))
! 145:
! 146: #define _rl_char_value(buf,ind) ((buf)[(ind)])
! 147:
! 148: #define _rl_walphabetic(c) (rl_alphabetic (c))
! 149:
! 150: #define _rl_to_wupper(c) (_rl_to_upper (c))
! 151: #define _rl_to_wlower(c) (_rl_to_lower (c))
! 152:
! 153: #define MB_NEXTCHAR(b,s,c,f) ((s) + (c))
! 154: #define MB_PREVCHAR(b,s,f) ((s) - 1)
! 155:
! 156: #define MB_INVALIDCH(x) (0)
! 157: #define MB_NULLWCH(x) (0)
! 158:
! 159: #endif /* !HANDLE_MULTIBYTE */
! 160:
! 161: extern int rl_byte_oriented;
! 162:
! 163: #endif /* _RL_MBUTIL_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>