]> git.wh0rd.org Git - nano.git/commitdiff
*more* cleanups to chars.c and related code
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 15 Jun 2005 06:04:08 +0000 (06:04 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 15 Jun 2005 06:04:08 +0000 (06:04 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2669 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/chars.c
src/proto.h

index e293fd56696facc86589e65afc18457c4033a176..9ee0537a4e4f84d165a16632632544c10f33b5dc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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:
index 7d1a19f3daf7922e41caf7567bb25277e1cd0a01..209e9754d3c4cd5905948df29c4047e822c89847 100644 (file)
@@ -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
index 527fb1b906fccf94a7a567ba3e52273019ad1a3f..59620e0fc748a90037847c7da1a5dc66620089de 100644 (file)
@@ -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