save 464 text with restructuring
This commit is contained in:
parent
3c33cbcecc
commit
68caa9afdd
58
edit.c
58
edit.c
@ -5,7 +5,7 @@
|
||||
|
||||
#include "sh.h"
|
||||
|
||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.62 2006/11/09 21:20:49 tg Exp $");
|
||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.63 2006/11/09 22:38:31 tg Exp $");
|
||||
|
||||
/* tty driver characters we are interested in */
|
||||
typedef struct {
|
||||
@ -943,17 +943,13 @@ utf_getcpfromcols(char *p, int cols)
|
||||
|
||||
__RCSID("_MirOS: src/lib/libc/i18n/wcwidth.c,v 1.4 2006/11/01 20:01:20 tg Exp $");
|
||||
|
||||
struct wcxwidth_interval {
|
||||
unsigned first;
|
||||
unsigned last;
|
||||
};
|
||||
|
||||
/* auxiliary function for binary search in interval table */
|
||||
static inline int wcxwidth_bisearch(unsigned, const struct wcxwidth_interval *, size_t);
|
||||
|
||||
/* sorted list of non-overlapping intervals of non-spacing characters */
|
||||
/* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
|
||||
static const struct wcxwidth_interval wcxwidth_combining[] = {
|
||||
static int
|
||||
wcxwidth(unsigned c)
|
||||
{
|
||||
static const struct cbset {
|
||||
unsigned short first;
|
||||
unsigned short last;
|
||||
} comb[] = {
|
||||
{ 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 },
|
||||
{ 0x0591, 0x05B9 }, { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF },
|
||||
{ 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 },
|
||||
@ -995,42 +991,26 @@ static const struct wcxwidth_interval wcxwidth_combining[] = {
|
||||
{ 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E },
|
||||
{ 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF },
|
||||
{ 0xFFF9, 0xFFFB }
|
||||
};
|
||||
};
|
||||
size_t min = 0, mid, max = sizeof (comb) / sizeof (struct cbset) - 1;
|
||||
|
||||
static int
|
||||
wcxwidth_bisearch(unsigned ucs, const struct wcxwidth_interval *table, size_t max)
|
||||
{
|
||||
size_t min = 0, mid;
|
||||
|
||||
if (ucs >= table[0].first && ucs <= table[max].last) {
|
||||
while (max >= min) {
|
||||
mid = (min + max) / 2;
|
||||
if (ucs > table[mid].last)
|
||||
min = mid + 1;
|
||||
else if (ucs < table[mid].first)
|
||||
max = mid - 1;
|
||||
else
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
wcxwidth(unsigned c)
|
||||
{
|
||||
/* test for 8-bit control characters */
|
||||
if (c < 32 || (c >= 0x7f && c < 0xa0))
|
||||
return (c ? -1 : 0);
|
||||
|
||||
/* binary search in table of non-spacing characters */
|
||||
if (wcxwidth_bisearch(c, wcxwidth_combining,
|
||||
sizeof (wcxwidth_combining) / sizeof (struct wcxwidth_interval) - 1))
|
||||
if (c >= comb[0].first && c <= comb[max].last)
|
||||
while (max >= min) {
|
||||
mid = (min + max) / 2;
|
||||
if (c > comb[mid].last)
|
||||
min = mid + 1;
|
||||
else if (c < comb[mid].first)
|
||||
max = mid - 1;
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* if we arrive here, c is not a combining or C0/C1 control char */
|
||||
|
||||
return ((c >= 0x1100 && (
|
||||
c <= 0x115f || /* Hangul Jamo init. consonants */
|
||||
c == 0x2329 || c == 0x232a ||
|
||||
|
Loading…
x
Reference in New Issue
Block a user