aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1998-01-19 19:30:38 +0000
committerRichard M. Stallman1998-01-19 19:30:38 +0000
commit37f26f3c5a7de8a1b82b9678c77936f138c01308 (patch)
tree9085f9067bb90b1831cc70c013203e7b362ec5d1 /src
parentcb8419b5e667b4b404ef4c76bf54da7a54ee281b (diff)
downloademacs-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.c74
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
2108static 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
2114void
2115set_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
2128static void
2129set_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 */