Revert "Sync readline/ to version 7.0 alpha"
[deliverable/binutils-gdb.git] / readline / rlmbutil.h
CommitLineData
9255ee31
EZ
1/* rlmbutil.h -- utility functions for multibyte characters. */
2
cc88a640 3/* Copyright (C) 2001-2009 Free Software Foundation, Inc.
9255ee31 4
cc88a640
JK
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.
9255ee31 7
cc88a640
JK
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
9255ee31
EZ
11 (at your option) any later version.
12
cc88a640
JK
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
9255ee31
EZ
16 GNU General Public License for more details.
17
cc88a640
JK
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*/
9255ee31
EZ
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
cc88a640 32 support user defined character classes. */
9255ee31 33 /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
cc88a640 34#if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H)
9255ee31
EZ
35# include <wchar.h>
36# include <wctype.h>
cc88a640
JK
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)
832a9484 47 /* system is supposed to support XPG5 */
9255ee31
EZ
48# define HANDLE_MULTIBYTE 1
49# endif
50#endif
51
5bdf8622
DJ
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
9255ee31
EZ
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
94extern int _rl_find_prev_mbchar PARAMS((char *, int, int));
95extern int _rl_find_next_mbchar PARAMS((char *, int, int, int));
96
97#ifdef HANDLE_MULTIBYTE
98
99extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *));
100extern int _rl_get_char_len PARAMS((char *, mbstate_t *));
101extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *));
102
103extern int _rl_read_mbchar PARAMS((char *, int));
104extern int _rl_read_mbstring PARAMS((int, char *, int));
105
106extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
107
5bdf8622
DJ
108extern wchar_t _rl_char_value PARAMS((char *, int));
109extern 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
9255ee31
EZ
126#else /* !HANDLE_MULTIBYTE */
127
128#undef MB_LEN_MAX
129#undef MB_CUR_MAX
130
131#define MB_LEN_MAX 1
132#define MB_CUR_MAX 1
133
134#define _rl_find_prev_mbchar(b, i, f) (((i) == 0) ? (i) : ((i) - 1))
135#define _rl_find_next_mbchar(b, i1, i2, f) ((i1) + (i2))
136
5bdf8622
DJ
137#define _rl_char_value(buf,ind) ((buf)[(ind)])
138
139#define _rl_walphabetic(c) (rl_alphabetic (c))
140
141#define _rl_to_wupper(c) (_rl_to_upper (c))
142#define _rl_to_wlower(c) (_rl_to_lower (c))
143
144#define MB_NEXTCHAR(b,s,c,f) ((s) + (c))
145#define MB_PREVCHAR(b,s,f) ((s) - 1)
146
147#define MB_INVALIDCH(x) (0)
148#define MB_NULLWCH(x) (0)
149
9255ee31
EZ
150#endif /* !HANDLE_MULTIBYTE */
151
152extern int rl_byte_oriented;
153
154#endif /* _RL_MBUTIL_H_ */
This page took 0.592527 seconds and 4 git commands to generate.