diff options
| author | Richard M. Stallman | 1998-01-19 19:30:38 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1998-01-19 19:30:38 +0000 |
| commit | 37f26f3c5a7de8a1b82b9678c77936f138c01308 (patch) | |
| tree | 9085f9067bb90b1831cc70c013203e7b362ec5d1 /src | |
| parent | cb8419b5e667b4b404ef4c76bf54da7a54ee281b (diff) | |
| download | emacs-37f26f3c5a7de8a1b82b9678c77936f138c01308.tar.gz emacs-37f26f3c5a7de8a1b82b9678c77936f138c01308.zip | |
(set_intervals_multibyte): New function.
(set_intervals_multibyte_1): New function.
Diffstat (limited to 'src')
| -rw-r--r-- | src/intervals.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/intervals.c b/src/intervals.c index bd47862bdfa..a3156280662 100644 --- a/src/intervals.c +++ b/src/intervals.c | |||
| @@ -2104,5 +2104,79 @@ compare_string_intervals (s1, s2) | |||
| 2104 | } | 2104 | } |
| 2105 | return 1; | 2105 | return 1; |
| 2106 | } | 2106 | } |
| 2107 | |||
| 2108 | static void set_intervals_multibyte_1 (INTERVAL, int, int, int, int, int); | ||
| 2109 | |||
| 2110 | /* Update the intervals of the current buffer | ||
| 2111 | to fit the contents as multibyte (if MULTI_FLAG is 1) | ||
| 2112 | or to fit them as non-multibyte (if MULTI_FLAG is 0). */ | ||
| 2113 | |||
| 2114 | void | ||
| 2115 | set_intervals_multibyte (multi_flag) | ||
| 2116 | int multi_flag; | ||
| 2117 | { | ||
| 2118 | if (BUF_INTERVALS (current_buffer)) | ||
| 2119 | set_intervals_multibyte_1 (BUF_INTERVALS (current_buffer), multi_flag, | ||
| 2120 | BEG, BEG_BYTE, Z, Z_BYTE); | ||
| 2121 | } | ||
| 2122 | |||
| 2123 | /* Recursively adjust interval I in the current buffer | ||
| 2124 | for setting enable_multibyte_characters to MULTI_FLAG. | ||
| 2125 | The range of interval I is START ... END in characters, | ||
| 2126 | START_BYTE ... END_BYTE in bytes. */ | ||
| 2127 | |||
| 2128 | static void | ||
| 2129 | set_intervals_multibyte_1 (i, multi_flag, start, start_byte, end, end_byte) | ||
| 2130 | INTERVAL i; | ||
| 2131 | int multi_flag; | ||
| 2132 | int start, start_byte, end, end_byte; | ||
| 2133 | { | ||
| 2134 | INTERVAL left, right; | ||
| 2135 | |||
| 2136 | /* Fix the length of this interval. */ | ||
| 2137 | if (multi_flag) | ||
| 2138 | i->total_length = end - start; | ||
| 2139 | else | ||
| 2140 | i->total_length = end_byte - start_byte; | ||
| 2141 | |||
| 2142 | /* Recursively fix the length of the subintervals. */ | ||
| 2143 | if (i->left) | ||
| 2144 | { | ||
| 2145 | int left_end, left_end_byte; | ||
| 2146 | |||
| 2147 | if (multi_flag) | ||
| 2148 | { | ||
| 2149 | left_end_byte = start_byte + LEFT_TOTAL_LENGTH (i); | ||
| 2150 | left_end = BYTE_TO_CHAR (left_end_byte); | ||
| 2151 | } | ||
| 2152 | else | ||
| 2153 | { | ||
| 2154 | left_end = start + LEFT_TOTAL_LENGTH (i); | ||
| 2155 | left_end_byte = CHAR_TO_BYTE (left_end); | ||
| 2156 | } | ||
| 2157 | |||
| 2158 | set_intervals_multibyte_1 (i->left, multi_flag, start, start_byte, | ||
| 2159 | left_end, left_end_byte); | ||
| 2160 | } | ||
| 2161 | if (i->right) | ||
| 2162 | { | ||
| 2163 | int right_start_byte, right_start; | ||
| 2164 | |||
| 2165 | if (multi_flag) | ||
| 2166 | { | ||
| 2167 | right_start_byte = end_byte - RIGHT_TOTAL_LENGTH (i); | ||
| 2168 | right_start = BYTE_TO_CHAR (right_start_byte); | ||
| 2169 | } | ||
| 2170 | else | ||
| 2171 | { | ||
| 2172 | right_start = end - RIGHT_TOTAL_LENGTH (i); | ||
| 2173 | right_start_byte = CHAR_TO_BYTE (right_start); | ||
| 2174 | } | ||
| 2175 | |||
| 2176 | set_intervals_multibyte_1 (i->right, multi_flag, | ||
| 2177 | right_start, right_start_byte, | ||
| 2178 | end, end_byte); | ||
| 2179 | } | ||
| 2180 | } | ||
| 2107 | 2181 | ||
| 2108 | #endif /* USE_TEXT_PROPERTIES */ | 2182 | #endif /* USE_TEXT_PROPERTIES */ |