int main(int argc, char **argv) { struct _vte_trie *trie; GValueArray *array = NULL; GQuark quark; gunichar buf[LINE_MAX]; const gunichar *consumed; gsize buflen; _vte_debug_init(); g_type_init(); trie = _vte_trie_new(); _vte_trie_add(trie, "abcdef", 6, "abcdef", g_quark_from_static_string("abcdef")); _vte_trie_add(trie, "abcde", 5, "abcde", g_quark_from_static_string("abcde")); _vte_trie_add(trie, "abcdeg", 6, "abcdeg", g_quark_from_static_string("abcdeg")); _vte_trie_add(trie, "abc%+Aeg", 8, "abc%+Aeg", g_quark_from_static_string("abc%+Aeg")); _vte_trie_add(trie, "abc%deg", 7, "abc%deg", g_quark_from_static_string("abc%deg")); _vte_trie_add(trie, "abc%%eg", 7, "abc%%eg", g_quark_from_static_string("abc%%eg")); _vte_trie_add(trie, "abc%%%i%deg", 11, "abc%%%i%deg", g_quark_from_static_string("abc%%%i%deg")); _vte_trie_add(trie, "<esc>[%i%d;%dH", 14, "vtmatch", g_quark_from_static_string("vtmatch")); _vte_trie_add(trie, "<esc>[%i%mL", 11, "multimatch", g_quark_from_static_string("multimatch")); _vte_trie_add(trie, "<esc>[%mL<esc>[%mL", 18, "greedy", g_quark_from_static_string("greedy")); _vte_trie_add(trie, "<esc>]2;%sh", 11, "decset-title", g_quark_from_static_string("decset-title")); printf("Wide encoding is `%s'.\n", VTE_CONV_GUNICHAR_TYPE); _vte_trie_print(trie); printf("\n"); quark = 0; convert_mbstowcs("abc", 3, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abc", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abcdef", 6, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abcdef", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abcde", 5, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abcde", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abcdeg", 6, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abcdeg", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abc%deg", 7, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abc%deg", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abc10eg", 7, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abc10eg", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abc%eg", 6, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abc%eg", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abc%10eg", 8, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abc%10eg", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("abcBeg", 6, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "abcBeg", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("<esc>[25;26H", 12, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>[25;26H", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("<esc>[25;2", 10, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>[25;2", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); } quark = 0; convert_mbstowcs("<esc>[25L", 9, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>[25L", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); } quark = 0; convert_mbstowcs("<esc>[25L<esc>[24L", 18, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>[25L<esc>[24L", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); } quark = 0; convert_mbstowcs("<esc>[25;26L", 12, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>[25;26L", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); } quark = 0; convert_mbstowcs("<esc>]2;WoofWoofh", 17, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>]2;WoofWoofh", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("<esc>]2;WoofWoofh<esc>]2;WoofWoofh", 34, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>]2;WoofWoofh<esc>]2;WoofWoofh", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } quark = 0; convert_mbstowcs("<esc>]2;WoofWoofhfoo", 20, buf, &buflen, sizeof(buf)); printf("`%s' = `%s'\n", "<esc>]2;WoofWoofhfoo", _vte_trie_match(trie, buf, buflen, NULL, &consumed, &quark, &array)); printf("=> `%s' (%d)\n", g_quark_to_string(quark), (int)(consumed - buf)); if (array != NULL) { dump_array(array); _vte_matcher_free_params_array(NULL, array); array = NULL; } _vte_trie_free(trie); return 0; }
int main(int argc, char **argv) { struct _vte_matcher *matcher = NULL; GArray *array; unsigned int i, j; int l; unsigned char buf[4096]; GValue *value; int infile; struct _vte_iso2022_state *subst; const char *tmp; GValueArray *values; _vte_debug_init(); if (argc < 1) { g_print("usage: %s [file]\n", argv[0]); return 1; } if ((argc > 1) && (strcmp(argv[1], "-") != 0)) { infile = open (argv[1], O_RDONLY); if (infile == -1) { g_print("error opening %s: %s\n", argv[1], strerror(errno)); exit(1); } } else { infile = 1; } g_type_init(); array = g_array_new(FALSE, FALSE, sizeof(gunichar)); matcher = _vte_matcher_new(); subst = _vte_iso2022_state_new(NULL, VTE_ISO2022_DEFAULT_UTF8_AMBIGUOUS_WIDTH, NULL, NULL); for (;;) { l = read (infile, buf, sizeof (buf)); if (!l) break; if (l == -1) { if (errno == EAGAIN) continue; exit (1); } g_array_set_size (array, 0); _vte_iso2022_process(subst, buf, (unsigned int) l, array); i = 0; while (i <= array->len) { tmp = NULL; values = NULL; for (j = 1; j < (array->len - i); j++) { _vte_matcher_match(matcher, &g_array_index(array, gunichar, i), j, &tmp, NULL, &values); if ((tmp == NULL) || (strlen(tmp) > 0)) { break; } } if (i + j == array->len) { break; } if (tmp == NULL) { gunichar c; c = g_array_index(array, gunichar, i); if (VTE_ISO2022_HAS_ENCODED_WIDTH(c)) { c &= ~VTE_ISO2022_ENCODED_WIDTH_MASK; } if (c < 32) { g_print("`^%c'\n", c + 64); } else if (c < 127) { g_print("`%c'\n", c); } else { g_print("`0x%x'\n", c); } i++; continue; } l = j; g_print("%s(", tmp); for (j = 0; (values != NULL) && (j < values->n_values); j++) { if (j > 0) { g_print(", "); } value = g_value_array_get_nth(values, j); if (G_VALUE_HOLDS_LONG(value)) { g_print("%ld", g_value_get_long(value)); } if (G_VALUE_HOLDS_STRING(value)) { g_print("`%s'", g_value_get_string(value)); } if (G_VALUE_HOLDS_POINTER(value)) { g_print("`%ls'", (wchar_t*) g_value_get_pointer(value)); } } if (values != NULL) { _vte_matcher_free_params_array(matcher, values); } g_print(")\n"); i += l; } } g_print("End of data.\n"); close (infile); _vte_iso2022_state_free(subst); g_array_free(array, TRUE); _vte_matcher_free(matcher); return 0; }