Xinqi Bao's Git
projects
/
st.git
/ diff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (parent:
8b602a3
)
fix: consistent usage of bitmask operations on unicode functions
author
Markus Teich <
[email protected]
>
Sat, 22 Jun 2013 21:06:49 +0000
(23:06 +0200)
committer
Roberto E. Vargas Caballero <
[email protected]
>
Thu, 4 Jul 2013 07:28:19 +0000
(09:28 +0200)
st.c
diff
|
blob
|
history
diff --git
a/st.c
b/st.c
index
16803ec
..
ac1954e
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-150,10
+150,6
@@
enum selection_snap {
SNAP_LINE = 2
};
SNAP_LINE = 2
};
-/* bit macro */
-#undef B0
-enum { B0=1, B1=2, B2=4, B3=8, B4=16, B5=32, B6=64, B7=128 };
-
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
@@
-527,17
+523,17
@@
utf8decode(char *s, long *u) {
rtn = 1;
c = *s;
rtn = 1;
c = *s;
- if(~c &
B7
) { /* 0xxxxxxx */
+ if(~c &
0x80
) { /* 0xxxxxxx */
*u = c;
return rtn;
*u = c;
return rtn;
- } else if((c &
(B7|B6|B5)) == (B7|B6)
) { /* 110xxxxx */
- *u = c
&(B4|B3|B2|B1|B0)
;
+ } else if((c &
0xE0) == 0xC0
) { /* 110xxxxx */
+ *u = c
& 0x1F
;
n = 1;
n = 1;
- } else if((c &
(B7|B6|B5|B4)) == (B7|B6|B5)
) { /* 1110xxxx */
- *u = c
&(B3|B2|B1|B0)
;
+ } else if((c &
0xF0) == 0xE0
) { /* 1110xxxx */
+ *u = c
& 0x0F
;
n = 2;
n = 2;
- } else if((c &
(B7|B6|B5|B4|B3)) == (B7|B6|B5|B4)
) { /* 11110xxx */
- *u = c &
(B2|B1|B0)
;
+ } else if((c &
0xF8) == 0xF0
) { /* 11110xxx */
+ *u = c &
0x07
;
n = 3;
} else {
goto invalid;
n = 3;
} else {
goto invalid;
@@
-545,10
+541,10
@@
utf8decode(char *s, long *u) {
for(i = n, ++s; i > 0; --i, ++rtn, ++s) {
c = *s;
for(i = n, ++s; i > 0; --i, ++rtn, ++s) {
c = *s;
- if((c &
(B7|B6)) != B7
) /* 10xxxxxx */
+ if((c &
0xC0) != 0x80
) /* 10xxxxxx */
goto invalid;
*u <<= 6;
goto invalid;
*u <<= 6;
- *u |= c &
(B5|B4|B3|B2|B1|B0)
;
+ *u |= c &
0x3F
;
}
if((n == 1 && *u < 0x80) ||
}
if((n == 1 && *u < 0x80) ||
@@
-577,20
+573,20
@@
utf8encode(long *u, char *s) {
*sp = uc; /* 0xxxxxxx */
return 1;
} else if(*u < 0x800) {
*sp = uc; /* 0xxxxxxx */
return 1;
} else if(*u < 0x800) {
- *sp = (uc >> 6) |
(B7|B6)
; /* 110xxxxx */
+ *sp = (uc >> 6) |
0xC0
; /* 110xxxxx */
n = 1;
} else if(uc < 0x10000) {
n = 1;
} else if(uc < 0x10000) {
- *sp = (uc >> 12) |
(B7|B6|B5)
; /* 1110xxxx */
+ *sp = (uc >> 12) |
0xE0
; /* 1110xxxx */
n = 2;
} else if(uc <= 0x10FFFF) {
n = 2;
} else if(uc <= 0x10FFFF) {
- *sp = (uc >> 18) |
(B7|B6|B5|B4)
; /* 11110xxx */
+ *sp = (uc >> 18) |
0xF0
; /* 11110xxx */
n = 3;
} else {
goto invalid;
}
for(i=n,++sp; i>0; --i,++sp)
n = 3;
} else {
goto invalid;
}
for(i=n,++sp; i>0; --i,++sp)
- *sp = ((uc >> 6*(i-1)) &
(B5|B4|B3|B2|B1|B0)) | B7
; /* 10xxxxxx */
+ *sp = ((uc >> 6*(i-1)) &
0x3F) | 0x80
; /* 10xxxxxx */
return n+1;
invalid:
return n+1;
invalid:
@@
-613,16
+609,16
@@
isfullutf8(char *s, int b) {
c3 = (uchar *)++s;
if(b < 1) {
return 0;
c3 = (uchar *)++s;
if(b < 1) {
return 0;
- } else if((*c1
&(B7|B6|B5)) == (B7|B6)
&& b == 1) {
+ } else if((*c1
& 0xE0) == 0xC0
&& b == 1) {
return 0;
return 0;
- } else if((*c1
&(B7|B6|B5|B4)) == (B7|B6|B5)
&&
+ } else if((*c1
& 0xF0) == 0xE0
&&
((b == 1) ||
((b == 1) ||
- ((b == 2) && (*c2
&(B7|B6)) == B7
))) {
+ ((b == 2) && (*c2
& 0xC0) == 0x80
))) {
return 0;
return 0;
- } else if((*c1
&(B7|B6|B5|B4|B3)) == (B7|B6|B5|B4)
&&
+ } else if((*c1
& 0xF8) == 0xF0
&&
((b == 1) ||
((b == 1) ||
- ((b == 2) && (*c2
&(B7|B6)) == B7
) ||
- ((b == 3) && (*c2
&(B7|B6)) == B7 && (*c3&(B7|B6)) == B7
))) {
+ ((b == 2) && (*c2
& 0xC0) == 0x80
) ||
+ ((b == 3) && (*c2
& 0xC0) == 0x80 && (*c3 & 0xC0) == 0x80
))) {
return 0;
} else {
return 1;
return 0;
} else {
return 1;
@@
-633,11
+629,11
@@
int
utf8size(char *s) {
uchar c = *s;
utf8size(char *s) {
uchar c = *s;
- if(~c
&B7
) {
+ if(~c
& 0x80
) {
return 1;
return 1;
- } else if((c
&(B7|B6|B5)) == (B7|B6)
) {
+ } else if((c
& 0xE0) == 0xC0
) {
return 2;
return 2;
- } else if((c
&(B7|B6|B5|B4)) == (B7|B6|B5)
) {
+ } else if((c
& 0xF0) == 0xE0
) {
return 3;
} else {
return 4;
return 3;
} else {
return 4;
@@
-3456,7
+3452,7
@@
kpress(XEvent *ev) {
if(len == 1 && e->state & Mod1Mask) {
if(IS_SET(MODE_8BIT)) {
if(*xstr < 0177) {
if(len == 1 && e->state & Mod1Mask) {
if(IS_SET(MODE_8BIT)) {
if(*xstr < 0177) {
- c = *xstr |
B7
;
+ c = *xstr |
0x80
;
ret = utf8encode(&c, cp);
cp += ret;
len = 0;
ret = utf8encode(&c, cp);
cp += ret;
len = 0;