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:
David Herrmann committed 2012-09-14 17:18:51 +02:00
1 parent 2df4fc0d31
commit c1075fba18
3 files changed
+58 -52

No files matched your search

+37 -31
View File
@@ -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
View File
@@ -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 */
+8 -8
View File
@@ -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);
}
}