ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/misc.C
(Generate patch)

Comparing rxvt-unicode/src/misc.C (file contents):
Revision 1.19 by root, Sun Dec 12 06:30:25 2004 UTC vs.
Revision 1.20 by root, Mon Dec 13 06:44:18 2004 UTC

106 wchar_t *r = (wchar_t *)rxvt_malloc ((len + 1) * sizeof (wchar_t)); 106 wchar_t *r = (wchar_t *)rxvt_malloc ((len + 1) * sizeof (wchar_t));
107 wchar_t *p = r; 107 wchar_t *p = r;
108 108
109 unsigned char *s = (unsigned char *)str; 109 unsigned char *s = (unsigned char *)str;
110 110
111 while (len--) 111 while (len)
112 { 112 {
113 if (s[0] < 0x80) 113 if (s[0] < 0x80)
114 {
114 *p++ = *s++; 115 *p++ = *s++; len--;
116 }
115 else if (len > 0 117 else if (len > 0
116 && s[0] >= 0xc2 && s[0] <= 0xdf 118 && s[0] >= 0xc2 && s[0] <= 0xdf
117 && (s[1] & 0xc0) == 0x80) 119 && (s[1] & 0xc0) == 0x80)
118 { 120 {
119 *p++ = ((s[0] & 0x1f) << 6) 121 *p++ = ((s[0] & 0x1f) << 6)
120 | (s[1] & 0x3f); 122 | (s[1] & 0x3f);
121 s += 2; 123 s += 2; len -= 2;
122 } 124 }
123 else if (len > 1 125 else if (len > 1
124 && ( (s[0] == 0xe0 && s[1] >= 0xa0 && s[1] <= 0xbf) 126 && ( (s[0] == 0xe0 && s[1] >= 0xa0 && s[1] <= 0xbf)
125 || (s[0] >= 0xe1 && s[0] <= 0xec && s[1] >= 0x80 && s[1] <= 0xbf) 127 || (s[0] >= 0xe1 && s[0] <= 0xec && s[1] >= 0x80 && s[1] <= 0xbf)
126 || (s[0] == 0xed && s[1] >= 0x80 && s[1] <= 0x9f) 128 || (s[0] == 0xed && s[1] >= 0x80 && s[1] <= 0x9f)
129 && (s[2] & 0xc0) == 0x80) 131 && (s[2] & 0xc0) == 0x80)
130 { 132 {
131 *p++ = ((s[0] & 0x0f) << 12) 133 *p++ = ((s[0] & 0x0f) << 12)
132 | ((s[1] & 0x3f) << 6) 134 | ((s[1] & 0x3f) << 6)
133 | (s[2] & 0x3f); 135 | (s[2] & 0x3f);
134 s += 3; 136 s += 3; len -= 3;
135 } 137 }
136 else if (len > 2 138 else if (len > 2
137 && ( (s[0] == 0xf0 && s[1] >= 0x90 && s[1] <= 0xbf) 139 && ( (s[0] == 0xf0 && s[1] >= 0x90 && s[1] <= 0xbf)
138 || (s[0] >= 0xf1 && s[0] <= 0xf3 && s[1] >= 0x80 && s[1] <= 0xbf) 140 || (s[0] >= 0xf1 && s[0] <= 0xf3 && s[1] >= 0x80 && s[1] <= 0xbf)
139 || (s[0] == 0xf4 && s[1] >= 0x80 && s[1] <= 0x8f) 141 || (s[0] == 0xf4 && s[1] >= 0x80 && s[1] <= 0x8f)
143 { 145 {
144 *p++ = ((s[0] & 0x07) << 18) 146 *p++ = ((s[0] & 0x07) << 18)
145 | ((s[1] & 0x3f) << 12) 147 | ((s[1] & 0x3f) << 12)
146 | ((s[2] & 0x3f) << 6) 148 | ((s[2] & 0x3f) << 6)
147 | (s[3] & 0x3f); 149 | (s[3] & 0x3f);
148 s += 4; 150 s += 4; len -= 4;
149 } 151 }
150 else 152 else
151 { 153 {
152 *p++ = 0xfffd; 154 *p++ = 0xfffd;
153 s++; 155 s++; len--;
154 } 156 }
155 } 157 }
156 158
157 *p = 0; 159 *p = 0;
158 160

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines