#include "console.h"
#include "log.h"
+#include "unicode.h"
/* print buffer with boundary */
static void print_buf(struct kmscon_buffer *buf)
{
unsigned int width, height, x, y;
- struct kmscon_char *ch;
- int ret;
- const char *c;
-
- ret = kmscon_char_new(&ch);
- if (ret) {
- log_warning("Cannot allocate character\n");
- return;
- }
+ kmscon_symbol_t ch;
width = kmscon_buffer_get_width(buf);
height = kmscon_buffer_get_height(buf);
for (y = 0; y < height; ++y) {
printf("x");
for (x = 0; x < width; ++x) {
- kmscon_buffer_read(buf, x, y, ch);
- c = kmscon_char_get_u8(ch);
- printf("%c", c ? *c : ' ');
+ ch = kmscon_buffer_read(buf, x, y);
+ printf("%c", ch ? ch : ' ');
}
printf("x\n");
}
for (x = 0; x < width; ++x)
printf("x");
printf("x\n");
-
- kmscon_char_free(ch);
}
static void test1(struct kmscon_buffer *buf)
{
- int ret;
- struct kmscon_char *ch;
+ kmscon_symbol_t ch;
log_info("Test1:\n");
- ret = kmscon_char_new_u8(&ch, "?", 1);
- if (ret) {
- log_err("Cannot create character\n");
- return;
- }
+ kmscon_buffer_set_margins(buf, 1, 1);
+ ch = kmscon_symbol_make('?');
kmscon_buffer_write(buf, 0, 0, ch);
+ kmscon_buffer_write(buf, 2, 0, ch);
+ kmscon_buffer_write(buf, 4, 0, ch);
+ kmscon_buffer_write(buf, 1, 4, ch);
+ kmscon_buffer_write(buf, 3, 4, ch);
+ kmscon_buffer_write(buf, 5, 4, ch);
+ kmscon_buffer_write(buf, 9, 1, ch);
kmscon_buffer_write(buf, 9, 2, ch);
- kmscon_buffer_write(buf, 4, 4, ch);
- kmscon_buffer_rotate(buf);
print_buf(buf);
- kmscon_buffer_resize(buf, 5, 3);
+ kmscon_buffer_resize(buf, 20, 3);
print_buf(buf);
- kmscon_buffer_resize(buf, 10, 5);
+ kmscon_buffer_resize(buf, 20, 5);
print_buf(buf);
- kmscon_buffer_rotate(buf);
+ kmscon_buffer_write(buf, 15, 1, ch);
print_buf(buf);
+ kmscon_buffer_scroll_up(buf, 1);
+ print_buf(buf);
+}
+
+static void test2()
+{
+ struct kmscon_symbol_table *st;
+ int ret;
+ kmscon_symbol_t sym, sym2, sym3, sym4;
+ const uint32_t *str;
+ size_t len, i;
+
+ log_info("Test2:\n");
+
+ ret = kmscon_symbol_table_new(&st);
+ if (ret)
+ return;
+
+ sym = kmscon_symbol_make('a');
+ sym2 = kmscon_symbol_append(st, sym, '^');
+ sym3 = kmscon_symbol_append(st, sym2, '^');
+ sym4 = kmscon_symbol_append(st, sym, '^');
+
+ log_info("equality: %i %i %i\n", sym == sym2, sym2 == sym4,
+ sym3 == sym2);
+
+ str = kmscon_symbol_get(st, &sym3, &len);
+
+ printf("sym3: ");
+ for (i = 0; i < len; ++i)
+ printf("%c", str[i]);
+ printf("\n");
+
+ kmscon_symbol_table_unref(st);
+}
+
+static void test3()
+{
+ int ret, i;
+ struct kmscon_utf8_mach *mach;
+ char buf[] = { 'a', 'b', 0xE2, 0x82, 0xAC };
+ uint32_t val;;
+
+ log_info("Test3:\n");
+
+ ret = kmscon_utf8_mach_new(&mach);
+ if (ret)
+ return;
+
+ for (i = 0; i < sizeof(buf); ++i) {
+ ret = kmscon_utf8_mach_feed(mach, buf[i]);
+ if (ret == KMSCON_UTF8_ACCEPT) {
+ val = kmscon_utf8_mach_get(mach);
+ printf("ret: %d 0x%X\n", ret, val);
+ }
+ }
- kmscon_char_free(ch);
+ kmscon_utf8_mach_free(mach);
}
int main(int argc, char **argv)
log_err("Cannot create buffer object\n");
goto err_out;
}
+ kmscon_buffer_set_max_sb(buf, 128);
test1(buf);
+ test2();
+ test3();
kmscon_buffer_unref(buf);
err_out: