From e221311f2e3cb0838572e3c57aa690532de07dba Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Wed, 15 Jun 2005 03:03:45 +0000 Subject: [PATCH] don't count punctuation when searching for a whole word in is_whole_word() git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2666 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- src/chars.c | 16 +++++++++------- src/nano.c | 10 +++++----- src/proto.h | 2 +- src/search.c | 10 +++++----- src/winio.c | 10 +++++----- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/chars.c b/src/chars.c index 01c89310..7d1a19f3 100644 --- a/src/chars.c +++ b/src/chars.c @@ -126,8 +126,9 @@ bool is_cntrl_mbchar(const char *c) } /* Return TRUE for a multibyte character found in a word (currently only - * an alphanumeric or punctuation character) and FALSE otherwise. */ -bool is_word_mbchar(const char *c) + * 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); @@ -141,10 +142,11 @@ bool is_word_mbchar(const char *c) wc = (unsigned char)*c; } - return iswalnum(wc) || iswpunct(wc); + return iswalnum(wc) || (allow_punct ? iswpunct(wc) : FALSE); } else #endif - return isalnum((unsigned char)*c) || ispunct((unsigned char)*c); + return isalnum((unsigned char)*c) || (allow_punct ? + ispunct((unsigned char)*c) : FALSE); } /* c is a control character. It displays as ^@, ^?, or ^[ch], where ch @@ -241,7 +243,7 @@ int mb_cur_max(void) { return #ifdef NANO_WIDE - (!ISSET(NO_UTF8)) ? MB_CUR_MAX : + !ISSET(NO_UTF8) ? MB_CUR_MAX : #endif 1; } @@ -560,7 +562,7 @@ const char *mbstrcasestr(const char *haystack, const char *needle) free(r_mb); free(q_mb); - return (found_needle) ? haystack : NULL; + return found_needle ? haystack : NULL; } else #endif return strcasestr(haystack, needle); @@ -670,7 +672,7 @@ const char *mbrevstrcasestr(const char *haystack, const char *needle, free(r_mb); free(q_mb); - return (found_needle) ? rev_start : NULL; + return found_needle ? rev_start : NULL; } else #endif return revstrcasestr(haystack, needle, rev_start); diff --git a/src/nano.c b/src/nano.c index 3f90ea89..c8cdc077 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1460,7 +1460,7 @@ bool do_next_word(bool allow_update) /* If we've found it, stop moving forward through the current * line. */ - if (!is_word_mbchar(char_mb)) + if (!is_word_mbchar(char_mb, TRUE)) break; /* If we haven't found it, then we've started on a word, so set @@ -1481,7 +1481,7 @@ bool do_next_word(bool allow_update) /* If we've found it, stop moving forward through the * current line. */ - if (is_word_mbchar(char_mb)) + if (is_word_mbchar(char_mb, TRUE)) break; current_x += char_mb_len; @@ -1538,7 +1538,7 @@ void do_prev_word(void) /* If we've found it, stop moving backward through the current * line. */ - if (!is_word_mbchar(char_mb)) + if (!is_word_mbchar(char_mb, TRUE)) break; if (current_x == 0) @@ -1561,7 +1561,7 @@ void do_prev_word(void) /* If we've found it, stop moving backward through the * current line. */ - if (is_word_mbchar(char_mb)) + if (is_word_mbchar(char_mb, TRUE)) break; if (current_x == 0) @@ -1600,7 +1600,7 @@ void do_prev_word(void) /* If we've found it, stop moving backward through the * current line. */ - if (!is_word_mbchar(char_mb)) + if (!is_word_mbchar(char_mb, TRUE)) break; if (current_x == 0) diff --git a/src/proto.h b/src/proto.h index fdbaf8e2..527fb1b9 100644 --- a/src/proto.h +++ b/src/proto.h @@ -172,7 +172,7 @@ bool is_cntrl_char(int c); bool is_cntrl_wchar(wint_t wc); #endif bool is_cntrl_mbchar(const char *c); -bool is_word_mbchar(const char *c); +bool is_word_mbchar(const char *c, bool allow_punct); char control_rep(char c); #ifdef NANO_WIDE wchar_t control_wrep(wchar_t c); diff --git a/src/search.c b/src/search.c index 07aa492f..9019c570 100644 --- a/src/search.c +++ b/src/search.c @@ -273,11 +273,11 @@ bool is_whole_word(size_t pos, const char *buf, const char *word) parse_mbchar(buf + word_end, r, NULL, NULL); /* If we're at the beginning of the line or the character before the - * word isn't a "word" character, and if we're at the end of the - * line or the character after the word isn't a "word" character, we - * have a whole word. */ - retval = (pos == 0 || !is_word_mbchar(p)) && - (word_end == strlen(buf) || !is_word_mbchar(r)); + * word isn't a non-punctuation "word" character, and if we're at + * the end of the line or the character after the word isn't a + * non-punctuation "word" character, we have a whole word. */ + retval = (pos == 0 || !is_word_mbchar(p, FALSE)) && + (word_end == strlen(buf) || !is_word_mbchar(r, FALSE)); free(p); free(r); diff --git a/src/winio.c b/src/winio.c index 3c42333b..aff5fe04 100644 --- a/src/winio.c +++ b/src/winio.c @@ -1917,7 +1917,7 @@ void do_statusbar_next_word(void) /* If we've found it, stop moving forward through the current * line. */ - if (!is_word_mbchar(char_mb)) + if (!is_word_mbchar(char_mb, TRUE)) break; statusbar_x += char_mb_len; @@ -1933,7 +1933,7 @@ void do_statusbar_next_word(void) /* If we've found it, stop moving forward through the current * line. */ - if (is_word_mbchar(char_mb)) + if (is_word_mbchar(char_mb, TRUE)) break; statusbar_x += char_mb_len; @@ -1960,7 +1960,7 @@ void do_statusbar_prev_word(void) /* If we've found it, stop moving backward through the current * line. */ - if (!is_word_mbchar(char_mb)) + if (!is_word_mbchar(char_mb, TRUE)) break; if (statusbar_x == 0) @@ -1982,7 +1982,7 @@ void do_statusbar_prev_word(void) /* If we've found it, stop moving backward through the current * line. */ - if (is_word_mbchar(char_mb)) + if (is_word_mbchar(char_mb, TRUE)) break; if (statusbar_x == 0) @@ -2005,7 +2005,7 @@ void do_statusbar_prev_word(void) /* If we've found it, stop moving backward through the * current line. */ - if (!is_word_mbchar(char_mb)) + if (!is_word_mbchar(char_mb, TRUE)) break; if (statusbar_x == 0) -- 2.39.5