mirror of
git://git.sv.gnu.org/nano.git
synced 2024-11-22 21:01:24 +03:00
*more* cleanups to chars.c and related code
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2669 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
parent
d1323e4e35
commit
2515ccc0a0
@ -75,8 +75,8 @@ CVS code -
|
||||
shortcut_init() and do_next_word(). (DLR)
|
||||
- Detect words more accurately by taking punctuation into
|
||||
account, and convert all word-detecting functions to use the
|
||||
same wrapper function for ease of maintenance. Changes to
|
||||
is_alnum_mbchar() (renamed is_word_mbchar()); changes to
|
||||
same wrapper function for ease of maintenance. New functions
|
||||
is_punct_mbchar() and is_word_mbchar(); changes to
|
||||
do_next_word(), do_prev_word(), is_whole_word(),
|
||||
do_statusbar_next_word(), and do_statusbar_prev_word(). (DLR)
|
||||
- chars.c:
|
||||
|
43
src/chars.c
43
src/chars.c
@ -62,6 +62,27 @@ bool is_byte(int c)
|
||||
return ((unsigned int)c == (unsigned char)c);
|
||||
}
|
||||
|
||||
/* This function is equivalent to isalnum() for multibyte characters. */
|
||||
bool is_alnum_mbchar(const char *c)
|
||||
{
|
||||
assert(c != NULL);
|
||||
|
||||
#ifdef NANO_WIDE
|
||||
if (!ISSET(NO_UTF8)) {
|
||||
wchar_t wc;
|
||||
int c_mb_len = mbtowc(&wc, c, MB_CUR_MAX);
|
||||
|
||||
if (c_mb_len <= 0) {
|
||||
mbtowc(NULL, NULL, 0);
|
||||
wc = (unsigned char)*c;
|
||||
}
|
||||
|
||||
return iswalnum(wc);
|
||||
} else
|
||||
#endif
|
||||
return isalnum((unsigned char)*c);
|
||||
}
|
||||
|
||||
/* This function is equivalent to isblank() for multibyte characters. */
|
||||
bool is_blank_mbchar(const char *c)
|
||||
{
|
||||
@ -125,10 +146,8 @@ bool is_cntrl_mbchar(const char *c)
|
||||
return is_cntrl_char((unsigned char)*c);
|
||||
}
|
||||
|
||||
/* Return TRUE for a multibyte character found in a word (currently only
|
||||
* an alphanumeric or punctuation character, and the latter only if
|
||||
* allow_punct is TRUE) and FALSE otherwise. */
|
||||
bool is_word_mbchar(const char *c, bool allow_punct)
|
||||
/* This function is equivalent to ispunct() for multibyte characters. */
|
||||
bool is_punct_mbchar(const char *c)
|
||||
{
|
||||
assert(c != NULL);
|
||||
|
||||
@ -142,11 +161,21 @@ bool is_word_mbchar(const char *c, bool allow_punct)
|
||||
wc = (unsigned char)*c;
|
||||
}
|
||||
|
||||
return iswalnum(wc) || (allow_punct ? iswpunct(wc) : FALSE);
|
||||
return iswpunct(wc);
|
||||
} else
|
||||
#endif
|
||||
return isalnum((unsigned char)*c) || (allow_punct ?
|
||||
ispunct((unsigned char)*c) : FALSE);
|
||||
return ispunct((unsigned char)*c);
|
||||
}
|
||||
|
||||
/* Return TRUE for a multibyte character found in a word (currently only
|
||||
* an alphanumeric or punctuation character, and the latter only if
|
||||
* allow_punct is TRUE) and FALSE otherwise. */
|
||||
bool is_word_mbchar(const char *c, bool allow_punct)
|
||||
{
|
||||
assert(c != NULL);
|
||||
|
||||
return is_alnum_mbchar(c) || (allow_punct ? is_punct_mbchar(c) :
|
||||
FALSE);
|
||||
}
|
||||
|
||||
/* c is a control character. It displays as ^@, ^?, or ^[ch], where ch
|
||||
|
@ -166,12 +166,14 @@ int nisblank(int c);
|
||||
int niswblank(wint_t wc);
|
||||
#endif
|
||||
bool is_byte(int c);
|
||||
bool is_alnum_mbchar(const char *c);
|
||||
bool is_blank_mbchar(const char *c);
|
||||
bool is_cntrl_char(int c);
|
||||
#ifdef NANO_WIDE
|
||||
bool is_cntrl_wchar(wint_t wc);
|
||||
#endif
|
||||
bool is_cntrl_mbchar(const char *c);
|
||||
bool is_punct_mbchar(const char *c);
|
||||
bool is_word_mbchar(const char *c, bool allow_punct);
|
||||
char control_rep(char c);
|
||||
#ifdef NANO_WIDE
|
||||
|
Loading…
Reference in New Issue
Block a user