unicode: rename kmscon_utf8_* to tsm_utf8_*
All terminal-emulation code is moved into a new library called "TSM - Terminal State Machine". So we rename everything to have a separate namespace. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
1 parent
2df4fc0d31
commit
c1075fba18
3 files changed
+58
-52
No files matched your search
+37
-31
@@ -356,14 +356,20 @@ void kmscon_symbol_free_u8(const char *s)
|
||||
free((void*)s);
|
||||
}
|
||||
|
||||
struct kmscon_utf8_mach {
|
||||
/*
|
||||
* UTF8 State Machine
|
||||
* This state machine parses UTF8 and converts it into a stream of Unicode
|
||||
* characters (UCS4 values).
|
||||
*/
|
||||
|
||||
struct tsm_utf8_mach {
|
||||
int state;
|
||||
uint32_t ch;
|
||||
};
|
||||
|
||||
int kmscon_utf8_mach_new(struct kmscon_utf8_mach **out)
|
||||
int tsm_utf8_mach_new(struct tsm_utf8_mach **out)
|
||||
{
|
||||
struct kmscon_utf8_mach *mach;
|
||||
struct tsm_utf8_mach *mach;
|
||||
|
||||
if (!out)
|
||||
return -EINVAL;
|
||||
@@ -373,13 +379,13 @@ int kmscon_utf8_mach_new(struct kmscon_utf8_mach **out)
|
||||
return -ENOMEM;
|
||||
|
||||
memset(mach, 0, sizeof(*mach));
|
||||
mach->state = KMSCON_UTF8_START;
|
||||
mach->state = TSM_UTF8_START;
|
||||
|
||||
*out = mach;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kmscon_utf8_mach_free(struct kmscon_utf8_mach *mach)
|
||||
void tsm_utf8_mach_free(struct tsm_utf8_mach *mach)
|
||||
{
|
||||
if (!mach)
|
||||
return;
|
||||
@@ -387,87 +393,87 @@ void kmscon_utf8_mach_free(struct kmscon_utf8_mach *mach)
|
||||
free(mach);
|
||||
}
|
||||
|
||||
int kmscon_utf8_mach_feed(struct kmscon_utf8_mach *mach, char ci)
|
||||
int tsm_utf8_mach_feed(struct tsm_utf8_mach *mach, char ci)
|
||||
{
|
||||
uint32_t c;
|
||||
|
||||
if (!mach)
|
||||
return KMSCON_UTF8_START;
|
||||
return TSM_UTF8_START;
|
||||
|
||||
c = ci;
|
||||
|
||||
switch (mach->state) {
|
||||
case KMSCON_UTF8_START:
|
||||
case KMSCON_UTF8_ACCEPT:
|
||||
case KMSCON_UTF8_REJECT:
|
||||
case TSM_UTF8_START:
|
||||
case TSM_UTF8_ACCEPT:
|
||||
case TSM_UTF8_REJECT:
|
||||
if (c == 0xC0 || c == 0xC1) {
|
||||
/* overlong encoding for ASCII, reject */
|
||||
mach->state = KMSCON_UTF8_REJECT;
|
||||
mach->state = TSM_UTF8_REJECT;
|
||||
} else if ((c & 0x80) == 0) {
|
||||
/* single byte, accept */
|
||||
mach->ch = c;
|
||||
mach->state = KMSCON_UTF8_ACCEPT;
|
||||
mach->state = TSM_UTF8_ACCEPT;
|
||||
} else if ((c & 0xC0) == 0x80) {
|
||||
/* parser out of sync, ignore byte */
|
||||
mach->state = KMSCON_UTF8_START;
|
||||
mach->state = TSM_UTF8_START;
|
||||
} else if ((c & 0xE0) == 0xC0) {
|
||||
/* start of two byte sequence */
|
||||
mach->ch = (c & 0x1F) << 6;
|
||||
mach->state = KMSCON_UTF8_EXPECT1;
|
||||
mach->state = TSM_UTF8_EXPECT1;
|
||||
} else if ((c & 0xF0) == 0xE0) {
|
||||
/* start of three byte sequence */
|
||||
mach->ch = (c & 0x0F) << 12;
|
||||
mach->state = KMSCON_UTF8_EXPECT2;
|
||||
mach->state = TSM_UTF8_EXPECT2;
|
||||
} else if ((c & 0xF8) == 0xF0) {
|
||||
/* start of four byte sequence */
|
||||
mach->ch = (c & 0x07) << 18;
|
||||
mach->state = KMSCON_UTF8_EXPECT3;
|
||||
mach->state = TSM_UTF8_EXPECT3;
|
||||
} else {
|
||||
/* overlong encoding, reject */
|
||||
mach->state = KMSCON_UTF8_REJECT;
|
||||
mach->state = TSM_UTF8_REJECT;
|
||||
}
|
||||
break;
|
||||
case KMSCON_UTF8_EXPECT3:
|
||||
case TSM_UTF8_EXPECT3:
|
||||
mach->ch |= (c & 0x3F) << 12;
|
||||
if ((c & 0xC0) == 0x80)
|
||||
mach->state = KMSCON_UTF8_EXPECT2;
|
||||
mach->state = TSM_UTF8_EXPECT2;
|
||||
else
|
||||
mach->state = KMSCON_UTF8_REJECT;
|
||||
mach->state = TSM_UTF8_REJECT;
|
||||
break;
|
||||
case KMSCON_UTF8_EXPECT2:
|
||||
case TSM_UTF8_EXPECT2:
|
||||
mach->ch |= (c & 0x3F) << 6;
|
||||
if ((c & 0xC0) == 0x80)
|
||||
mach->state = KMSCON_UTF8_EXPECT1;
|
||||
mach->state = TSM_UTF8_EXPECT1;
|
||||
else
|
||||
mach->state = KMSCON_UTF8_REJECT;
|
||||
mach->state = TSM_UTF8_REJECT;
|
||||
break;
|
||||
case KMSCON_UTF8_EXPECT1:
|
||||
case TSM_UTF8_EXPECT1:
|
||||
mach->ch |= c & 0x3F;
|
||||
if ((c & 0xC0) == 0x80)
|
||||
mach->state = KMSCON_UTF8_ACCEPT;
|
||||
mach->state = TSM_UTF8_ACCEPT;
|
||||
else
|
||||
mach->state = KMSCON_UTF8_REJECT;
|
||||
mach->state = TSM_UTF8_REJECT;
|
||||
break;
|
||||
default:
|
||||
mach->state = KMSCON_UTF8_REJECT;
|
||||
mach->state = TSM_UTF8_REJECT;
|
||||
break;
|
||||
}
|
||||
|
||||
return mach->state;
|
||||
}
|
||||
|
||||
uint32_t kmscon_utf8_mach_get(struct kmscon_utf8_mach *mach)
|
||||
uint32_t tsm_utf8_mach_get(struct tsm_utf8_mach *mach)
|
||||
{
|
||||
if (!mach || mach->state != KMSCON_UTF8_ACCEPT)
|
||||
if (!mach || mach->state != TSM_UTF8_ACCEPT)
|
||||
return KMSCON_UCS4_INVALID;
|
||||
|
||||
return mach->ch;
|
||||
}
|
||||
|
||||
void kmscon_utf8_mach_reset(struct kmscon_utf8_mach *mach)
|
||||
void tsm_utf8_mach_reset(struct tsm_utf8_mach *mach)
|
||||
{
|
||||
if (!mach)
|
||||
return;
|
||||
|
||||
mach->state = KMSCON_UTF8_START;
|
||||
mach->state = TSM_UTF8_START;
|
||||
}
|
||||
+13
-13
@@ -65,22 +65,22 @@ void kmscon_symbol_free_u8(const char *s);
|
||||
|
||||
/* utf8 state machine */
|
||||
|
||||
struct kmscon_utf8_mach;
|
||||
struct tsm_utf8_mach;
|
||||
|
||||
enum kmscon_utf8_mach_state {
|
||||
KMSCON_UTF8_START,
|
||||
KMSCON_UTF8_ACCEPT,
|
||||
KMSCON_UTF8_REJECT,
|
||||
KMSCON_UTF8_EXPECT1,
|
||||
KMSCON_UTF8_EXPECT2,
|
||||
KMSCON_UTF8_EXPECT3,
|
||||
enum tsm_utf8_mach_state {
|
||||
TSM_UTF8_START,
|
||||
TSM_UTF8_ACCEPT,
|
||||
TSM_UTF8_REJECT,
|
||||
TSM_UTF8_EXPECT1,
|
||||
TSM_UTF8_EXPECT2,
|
||||
TSM_UTF8_EXPECT3,
|
||||
};
|
||||
|
||||
int kmscon_utf8_mach_new(struct kmscon_utf8_mach **out);
|
||||
void kmscon_utf8_mach_free(struct kmscon_utf8_mach *mach);
|
||||
int tsm_utf8_mach_new(struct tsm_utf8_mach **out);
|
||||
void tsm_utf8_mach_free(struct tsm_utf8_mach *mach);
|
||||
|
||||
int kmscon_utf8_mach_feed(struct kmscon_utf8_mach *mach, char c);
|
||||
uint32_t kmscon_utf8_mach_get(struct kmscon_utf8_mach *mach);
|
||||
void kmscon_utf8_mach_reset(struct kmscon_utf8_mach *mach);
|
||||
int tsm_utf8_mach_feed(struct tsm_utf8_mach *mach, char c);
|
||||
uint32_t tsm_utf8_mach_get(struct tsm_utf8_mach *mach);
|
||||
void tsm_utf8_mach_reset(struct tsm_utf8_mach *mach);
|
||||
|
||||
#endif /* KMSCON_UNICODE_H */
|
||||
@@ -154,7 +154,7 @@ struct kmscon_vte {
|
||||
kmscon_vte_write_cb write_cb;
|
||||
void *data;
|
||||
|
||||
struct kmscon_utf8_mach *mach;
|
||||
struct tsm_utf8_mach *mach;
|
||||
unsigned long parse_cnt;
|
||||
|
||||
unsigned int state;
|
||||
@@ -381,7 +381,7 @@ int kmscon_vte_new(struct kmscon_vte **out, struct kmscon_console *con,
|
||||
vte->def_attr.bccode = COLOR_BACKGROUND;
|
||||
to_rgb(vte, &vte->def_attr);
|
||||
|
||||
ret = kmscon_utf8_mach_new(&vte->mach);
|
||||
ret = tsm_utf8_mach_new(&vte->mach);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
||||
@@ -416,7 +416,7 @@ void kmscon_vte_unref(struct kmscon_vte *vte)
|
||||
|
||||
log_debug("destroying vte object");
|
||||
kmscon_console_unref(vte->con);
|
||||
kmscon_utf8_mach_free(vte->mach);
|
||||
tsm_utf8_mach_free(vte->mach);
|
||||
free(vte);
|
||||
}
|
||||
|
||||
@@ -568,7 +568,7 @@ void kmscon_vte_reset(struct kmscon_vte *vte)
|
||||
kmscon_console_reset(vte->con);
|
||||
kmscon_console_set_flags(vte->con, KMSCON_CONSOLE_AUTO_WRAP);
|
||||
|
||||
kmscon_utf8_mach_reset(vte->mach);
|
||||
tsm_utf8_mach_reset(vte->mach);
|
||||
vte->state = STATE_GROUND;
|
||||
vte->gl = &kmscon_vte_unicode_lower;
|
||||
vte->gr = &kmscon_vte_unicode_upper;
|
||||
@@ -2105,10 +2105,10 @@ void kmscon_vte_input(struct kmscon_vte *vte, const char *u8, size_t len)
|
||||
} else if (vte->flags & FLAG_8BIT_MODE) {
|
||||
parse_data(vte, u8[i]);
|
||||
} else {
|
||||
state = kmscon_utf8_mach_feed(vte->mach, u8[i]);
|
||||
if (state == KMSCON_UTF8_ACCEPT ||
|
||||
state == KMSCON_UTF8_REJECT) {
|
||||
ucs4 = kmscon_utf8_mach_get(vte->mach);
|
||||
state = tsm_utf8_mach_feed(vte->mach, u8[i]);
|
||||
if (state == TSM_UTF8_ACCEPT ||
|
||||
state == TSM_UTF8_REJECT) {
|
||||
ucs4 = tsm_utf8_mach_get(vte->mach);
|
||||
parse_data(vte, ucs4);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user