diff options
| author | Kenichi Handa | 1997-02-27 06:50:46 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1997-02-27 06:50:46 +0000 |
| commit | 1312cff577e40ff84badabdf5bfe15173d12167d (patch) | |
| tree | f5a602ae19196fc12f978c085a9b8131541527d9 /src/search.c | |
| parent | 37667a5cd2979af92ef28e7b9c799da1c4c05fa6 (diff) | |
| download | emacs-1312cff577e40ff84badabdf5bfe15173d12167d.tar.gz emacs-1312cff577e40ff84badabdf5bfe15173d12167d.zip | |
(skip_chars): If enable-multibyte-characters is nil,
don't handle multibyte characters.
Diffstat (limited to 'src/search.c')
| -rw-r--r-- | src/search.c | 170 |
1 files changed, 101 insertions, 69 deletions
diff --git a/src/search.c b/src/search.c index d321ec1901e..abdd2460bd8 100644 --- a/src/search.c +++ b/src/search.c | |||
| @@ -741,6 +741,7 @@ skip_chars (forwardp, syntaxp, string, lim) | |||
| 741 | int n_char_ranges = 0; | 741 | int n_char_ranges = 0; |
| 742 | int negate = 0; | 742 | int negate = 0; |
| 743 | register int i; | 743 | register int i; |
| 744 | int multibyte = !NILP (current_buffer->enable_multibyte_characters); | ||
| 744 | 745 | ||
| 745 | CHECK_STRING (string, 0); | 746 | CHECK_STRING (string, 0); |
| 746 | 747 | ||
| @@ -774,8 +775,16 @@ skip_chars (forwardp, syntaxp, string, lim) | |||
| 774 | while (p != pend) | 775 | while (p != pend) |
| 775 | { | 776 | { |
| 776 | c = *p; | 777 | c = *p; |
| 777 | ch = STRING_CHAR (p, pend - p); | 778 | if (multibyte) |
| 778 | p += BYTES_BY_CHAR_HEAD (*p); | 779 | { |
| 780 | ch = STRING_CHAR (p, pend - p); | ||
| 781 | p += BYTES_BY_CHAR_HEAD (*p); | ||
| 782 | } | ||
| 783 | else | ||
| 784 | { | ||
| 785 | ch = c; | ||
| 786 | p++; | ||
| 787 | } | ||
| 779 | if (syntaxp) | 788 | if (syntaxp) |
| 780 | fastmap[syntax_spec_code[c]] = 1; | 789 | fastmap[syntax_spec_code[c]] = 1; |
| 781 | else | 790 | else |
| @@ -805,7 +814,7 @@ skip_chars (forwardp, syntaxp, string, lim) | |||
| 805 | char_ranges[n_char_ranges++] = ch, | 814 | char_ranges[n_char_ranges++] = ch, |
| 806 | char_ranges[n_char_ranges++] = ch2; | 815 | char_ranges[n_char_ranges++] = ch2; |
| 807 | } | 816 | } |
| 808 | p += BYTES_BY_CHAR_HEAD (*p); | 817 | p += multibyte ? BYTES_BY_CHAR_HEAD (*p) : 1; |
| 809 | } | 818 | } |
| 810 | else | 819 | else |
| 811 | { | 820 | { |
| @@ -825,7 +834,7 @@ skip_chars (forwardp, syntaxp, string, lim) | |||
| 825 | if (negate) | 834 | if (negate) |
| 826 | for (i = 0; i < sizeof fastmap; i++) | 835 | for (i = 0; i < sizeof fastmap; i++) |
| 827 | { | 836 | { |
| 828 | if (!BASE_LEADING_CODE_P (i)) | 837 | if (!multibyte || !BASE_LEADING_CODE_P (i)) |
| 829 | fastmap[i] ^= 1; | 838 | fastmap[i] ^= 1; |
| 830 | else | 839 | else |
| 831 | fastmap[i] = 1; | 840 | fastmap[i] = 1; |
| @@ -840,91 +849,114 @@ skip_chars (forwardp, syntaxp, string, lim) | |||
| 840 | { | 849 | { |
| 841 | if (forwardp) | 850 | if (forwardp) |
| 842 | { | 851 | { |
| 843 | while (pos < XINT (lim) | 852 | if (multibyte) |
| 844 | && fastmap[(int) SYNTAX (FETCH_CHAR (pos))]) | 853 | while (pos < XINT (lim) |
| 845 | INC_POS (pos); | 854 | && fastmap[(int) SYNTAX (FETCH_CHAR (pos))]) |
| 855 | INC_POS (pos); | ||
| 856 | else | ||
| 857 | while (pos < XINT (lim) | ||
| 858 | && fastmap[(int) SYNTAX (FETCH_BYTE (pos))]) | ||
| 859 | pos++; | ||
| 846 | } | 860 | } |
| 847 | else | 861 | else |
| 848 | { | 862 | { |
| 849 | while (pos > XINT (lim)) | 863 | if (multibyte) |
| 850 | { | 864 | while (pos > XINT (lim)) |
| 851 | int savepos = pos; | 865 | { |
| 852 | DEC_POS (pos); | 866 | int savepos = pos; |
| 853 | if (!fastmap[(int) SYNTAX (FETCH_CHAR (pos))]) | 867 | DEC_POS (pos); |
| 854 | { | 868 | if (!fastmap[(int) SYNTAX (FETCH_CHAR (pos))]) |
| 855 | pos = savepos; | 869 | { |
| 856 | break; | 870 | pos = savepos; |
| 857 | } | 871 | break; |
| 858 | } | 872 | } |
| 873 | } | ||
| 874 | else | ||
| 875 | while (pos > XINT (lim) | ||
| 876 | && fastmap[(int) SYNTAX (FETCH_BYTE (pos - 1))]) | ||
| 877 | pos--; | ||
| 859 | } | 878 | } |
| 860 | } | 879 | } |
| 861 | else | 880 | else |
| 862 | { | 881 | { |
| 863 | if (forwardp) | 882 | if (forwardp) |
| 864 | { | 883 | { |
| 865 | while (pos < XINT (lim) && fastmap[(c = FETCH_BYTE (pos))]) | 884 | if (multibyte) |
| 866 | { | 885 | while (pos < XINT (lim) && fastmap[(c = FETCH_BYTE (pos))]) |
| 867 | if (!BASE_LEADING_CODE_P (c)) | 886 | { |
| 868 | pos++; | 887 | if (!BASE_LEADING_CODE_P (c)) |
| 869 | else if (n_char_ranges) | 888 | pos++; |
| 870 | { | 889 | else if (n_char_ranges) |
| 871 | /* We much check CHAR_RANGES for a multibyte | 890 | { |
| 872 | character. */ | 891 | /* We much check CHAR_RANGES for a multibyte |
| 873 | ch = FETCH_MULTIBYTE_CHAR (pos); | 892 | character. */ |
| 874 | for (i = 0; i < n_char_ranges; i += 2) | 893 | ch = FETCH_MULTIBYTE_CHAR (pos); |
| 875 | if ((ch >= char_ranges[i] && ch <= char_ranges[i + 1])) | 894 | for (i = 0; i < n_char_ranges; i += 2) |
| 895 | if ((ch >= char_ranges[i] && ch <= char_ranges[i + 1])) | ||
| 896 | break; | ||
| 897 | if (!(negate ^ (i < n_char_ranges))) | ||
| 876 | break; | 898 | break; |
| 877 | if (!(negate ^ (i < n_char_ranges))) | ||
| 878 | break; | ||
| 879 | 899 | ||
| 880 | INC_POS (pos); | 900 | INC_POS (pos); |
| 881 | } | 901 | } |
| 882 | else | 902 | else |
| 883 | { | 903 | { |
| 884 | if (!negate) break; | 904 | if (!negate) break; |
| 885 | INC_POS (pos); | 905 | INC_POS (pos); |
| 886 | } | 906 | } |
| 887 | } | 907 | } |
| 908 | else | ||
| 909 | while (pos < XINT (lim) && fastmap[FETCH_BYTE (pos)]) | ||
| 910 | pos++; | ||
| 888 | } | 911 | } |
| 889 | else | 912 | else |
| 890 | { | 913 | { |
| 891 | while (pos > XINT (lim)) | 914 | if (multibyte) |
| 892 | { | 915 | while (pos > XINT (lim)) |
| 893 | int savepos = pos; | 916 | { |
| 894 | DEC_POS (pos); | 917 | int savepos = pos; |
| 895 | if (fastmap[(c = FETCH_BYTE (pos))]) | 918 | DEC_POS (pos); |
| 896 | { | 919 | if (fastmap[(c = FETCH_BYTE (pos))]) |
| 897 | if (!BASE_LEADING_CODE_P (c)) | 920 | { |
| 898 | ; | 921 | if (!BASE_LEADING_CODE_P (c)) |
| 899 | else if (n_char_ranges) | 922 | ; |
| 900 | { | 923 | else if (n_char_ranges) |
| 901 | /* We much check CHAR_RANGES for a multibyte | 924 | { |
| 902 | character. */ | 925 | /* We much check CHAR_RANGES for a multibyte |
| 903 | ch = FETCH_MULTIBYTE_CHAR (pos); | 926 | character. */ |
| 904 | for (i = 0; i < n_char_ranges; i += 2) | 927 | ch = FETCH_MULTIBYTE_CHAR (pos); |
| 905 | if (ch >= char_ranges[i] && ch <= char_ranges[i + 1]) | 928 | for (i = 0; i < n_char_ranges; i += 2) |
| 906 | break; | 929 | if (ch >= char_ranges[i] && ch <= char_ranges[i + 1]) |
| 907 | if (!(negate ^ (i < n_char_ranges))) | 930 | break; |
| 931 | if (!(negate ^ (i < n_char_ranges))) | ||
| 932 | { | ||
| 933 | pos = savepos; | ||
| 934 | break; | ||
| 935 | } | ||
| 936 | } | ||
| 937 | else | ||
| 938 | if (!negate) | ||
| 908 | { | 939 | { |
| 909 | pos = savepos; | 940 | pos = savepos; |
| 910 | break; | 941 | break; |
| 911 | } | 942 | } |
| 912 | } | 943 | } |
| 913 | else | 944 | else |
| 914 | if (!negate) | 945 | { |
| 915 | { | 946 | pos = savepos; |
| 916 | pos = savepos; | 947 | break; |
| 917 | break; | 948 | } |
| 918 | } | 949 | } |
| 919 | } | 950 | else |
| 920 | else | 951 | while (pos > XINT (lim) && fastmap[FETCH_BYTE (pos - 1)]) |
| 921 | { | 952 | pos--; |
| 922 | pos = savepos; | ||
| 923 | break; | ||
| 924 | } | ||
| 925 | } | ||
| 926 | } | 953 | } |
| 927 | } | 954 | } |
| 955 | if (multibyte | ||
| 956 | /* INC_POS or DEC_POS might have moved POS over LIM. */ | ||
| 957 | && (forwardp ? (pos > XINT (lim)) : (pos < XINT (lim)))) | ||
| 958 | pos = XINT (lim); | ||
| 959 | |||
| 928 | SET_PT (pos); | 960 | SET_PT (pos); |
| 929 | immediate_quit = 0; | 961 | immediate_quit = 0; |
| 930 | 962 | ||